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

标签 c arrays string pointers malloc

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

相关文章:

c - 将指向 char 数组的指针初始化为可变指针的最佳方法是什么?

c - 如何将文件中的一系列数字添加到数组中?

java - 文件将多行读取到一个字符串

java - Soap Request as String 将其转换为 java 对象

c - Eclipse Sonar C 项目

c - POSIX C 线程。互斥量示例。没有按预期工作

c++ - c(++) union 数据结构

c++ - 分段故障(核心已转储)-二维数组

python - 如何防止 pandas 数据框在追加后将字符串值逃避到 [...] ?

c - 从适配器获取 DNS 服务器 IP 地址?