[英]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.