Fra*_*lea 4 c arrays string malloc pointers
我正在学习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;
}
Run Code Online (Sandbox Code Playgroud)
输出:输出表明出现了严重错误
Host: localhost
Username: root
Password: mypassword
Host: root
Username: localhost
Password: Host: %s
Username: %s
Password: %s
Run Code Online (Sandbox Code Playgroud)
第一个printf似乎工作,但第二个有错误的数据.我做错了什么?
问题是您正在返回指向堆栈中的数组的指针.userDetailsHolder在堆栈上分配,在函数返回后不可用.
您可以malloc再次使用它来分配数组本身,然后在函数返回后它将可用.