【发布时间】:2017-04-19 04:58:26
【问题描述】:
我的代码中的返回值有问题。在这部分,返回值打印得很好:
char *getUserName(){
char username[50];
DWORD username_len = 50;
GetUserName(username, &username_len);
char *returnValue=username;
printf("user: %s\n\n",returnValue);
return returnValue;}
char *getSystemName(){
TCHAR szComputerName[256];
DWORD cchComputerName = 256;
GetComputerName(szComputerName, &cchComputerName);
char *returnValue=szComputerName;
printf("system: %s",returnValue);
return returnValue;}
但是,当我在 main 中使用 like 返回值时,它会返回疯狂的东西(有时它会返回很好的系统名称):
int main(){
char *userName = getUserName();
char *systemName = getSystemName();
printf("user: %s \n\n",userName);
printf("system: %s",systemName);
return 0;}
【问题讨论】:
-
字符串
username分配在栈上,而不是堆上,所以当函数返回时,它的值可能被覆盖。您必须要么在堆上动态分配它(通过malloc),要么在调用者中分配它并传递一个指向它的指针。
标签: c function pointers char return-value