我有一个文件,它有一个静态常量字符串和一个函数,它将返回指向该字符串的指针.文件看起来像这样:
typedef unsigned char BOOLEAN;
#define TRUE 1
#define FALSE 0
static const unsigned char MAL_Version[8] = "2.001";
/* Function to return Version string */
BOOLEAN GetVersion ( unsigned char* pu8Version )
{
BOOLEAN success = FALSE;
if(pu8Version != NULL)
{
pu8Version = &MAL_Version[0];
success = TRUE;
printf("\r\nTRUE");
printf("\r\n%s", pu8Version);
}
return success;
}
Run Code Online (Sandbox Code Playgroud)
在main()中,我声明一个数组并将其地址传递给GetVersion函数.当我这样做时,我会得到随机字符.
int main() {
unsigned char buffer[10];
GetVersion(buffer);
printf("\r\n%s", buffer);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
真正
2.001
D3
我错过了什么?函数中的指针正确打印字符串,但是当它返回时,它会打印垃圾.
这个说法
pu8Version = &MAL_Version[0];
Run Code Online (Sandbox Code Playgroud)
仅修改本地指针pu8Version中GetVersion(),并且不会改变buffer的main().
代替:
pu8Version = &MAL_Version[0];
Run Code Online (Sandbox Code Playgroud)
您可以复制的MAL_Version,以buffer具有:
strcpy(pu8Version, MAL_Version);
Run Code Online (Sandbox Code Playgroud)
如果你真的不需要副本MAL_Version,你也可以MAL_Version直接返回指针.就像是:
/* Function to return Version string */
const char *GetVersion(void)
{
return MAL_Version;
}
int main(void) {
const char *version = GetVersion();
printf("\n%s", version);
}
Run Code Online (Sandbox Code Playgroud)
请注意,您自己没有定义"BOOLEAN".bool(来自<stdbool.h>标题)类型在C99中可用于C.