我目前正在学习 C 语言中的字符串、指针和数组。我尝试编写一个程序,其中一个数组包含三个指向字符串地址的指针。这一切似乎都有效,但程序运行异常。
代码如下:
char** getUserDetails()
{
char* host = "localhost";
char* username = "root";
char* password = "mypassword";
// create array for holding pointers to strings
char *userDetailsHolder[3];
userDetailsHolder[0] = malloc(sizeof(char)*strlen(host));
strcpy(userDetailsHolder[0], host);
userDetailsHolder[1] = malloc(sizeof(char)*strlen(username));
strcpy(userDetailsHolder[1], username);
userDetailsHolder[2] = malloc(sizeof(char)*strlen(password));
strcpy(userDetailsHolder[2], password);
return userDetailsHolder;
}
int main()
{
char** userDetails = getUserDetails();
printf("Host: %s\nUsername: %s\nPassword: %s\n", userDetails[0], userDetails[1], userDetails[2]);
printf("Host: %s\nUsername: %s\nPassword: %s\n", userDetails[0], userDetails[1], userDetails[2]);
return 0;
}
输出:输出表明出现了严重错误
Host: localhost
Username: root
Password: mypassword
Host: root
Username: localhost
Password: Host: %s
Username: %s
Password: %s
第一个 printf
似乎可以工作,但第二个中有错误的数据。我做错了什么?
最佳答案
问题是您要返回一个指向驻留在堆栈上的数组的指针。 userDetailsHolder
分配在栈上,函数返回后不可用。
您可以再次使用malloc
来分配数组本身,然后它会在函数返回后可用。
关于c - C 中的指针、数组、字符串和 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595266/