簡體   English   中英

C中的指針,數組,字符串和Malloc

[英]Pointers, Arrays, Strings and Malloc in C

我正在學習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來分配數組本身,然后在函數返回后它將可用。

另外,請記住為字符串分配strlen(s)+1個字節。 C字符串以零字節結束,您需要確保它有空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM