返回char *值

时间:2016-12-04 20:44:19

标签: c function pointers char return-value

我的代码中有一个带有返回值的问题。在这部分中,返回值打印得很好:

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;}

2 个答案:

答案 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;}

其他功能也一样