gpt4 book ai didi

c - C 中的指针、数组、字符串和 Malloc

转载 作者:太空狗 更新时间:2023-10-29 15:18:33 26 4
gpt4 key购买 nike

我目前正在学习 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com