我的代码中有一个带有返回值的问题。在这部分中,返回值打印得很好:
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中使用类似返回值时,它会返回疯狂的东西(有时它会返回系统名称):
int main(){
char *userName = getUserName();
char *systemName = getSystemName();
printf("user: %s \n\n",userName);
printf("system: %s",systemName);
return 0;}
答案 0 :(得分:2)
那是因为你在getUserName()
中返回了一个指向局部变量的指针,导致了未定义的行为:
char *returnValue=username;
...
return returnValue;
有两种方法可以解决这个问题:
1)将char *getUserName()
的原型更改为`void getUserName(char username [])
在致电username
getUserName
2)保留原型char *getUserName()
,但您需要在该功能中malloc
username
。此外,您必须在free
username
手动main
答案 1 :(得分:0)
我已经解决了使用malloc函数。非常感谢。这是新代码:
char *getUserName(){
char username[50];
DWORD username_len = 50;
GetUserName(username, &username_len);
char *returnValue=(char *)malloc(strlen(username)+1);
strcpy(returnValue,username);
return returnValue;}
其他功能也一样