我定義爲char類型的數組,隨後
char users[5] = "";
(有什麼不對本聲明。這五個字符它正確初始化爲0
)
然後我通過如下分配將用戶添加到這個陣列中
users[0] = "UserOne";
users[1] = "UserTwo";
但是,我的程序崩潰與分段錯誤。 (你想 想?)
什麼讓你覺得你可以一個存儲指向一個字符串(這是8-char
在x86_64和4-char
在x86)作爲單個字符在users[0]
?這同樣適用於users[1]
。
當您聲明char users[5] = "";
時,您已創建了一個char數組,例如,有5 字符可供使用指標,例如:
-----------
|0|1|2|3|4|
-----------
什麼看來你打算做的是創造了一個數組的指針爲char,例如現在
char *users[5] = {NULL};
,用指針數組,你可以每個字符串字面的起始地址分配給users
陣列,例如
users[0] = "UserOne";
users[1] = "UserTwo";
...
users[4] = "LastOneYouCanAdd";
想一想,但讓我知道你是否還有其他問題。短的例子是:
#include <stdio.h>
#define MAXU 5
int main (void) {
char *users[MAXU] = {NULL};
users[0] = "UserOne";
users[1] = "UserTwo";
users[4] = "Straggler";
for (int i = 0; i < MAXU; i++)
if (users[i])
printf (" users[%d] : %s\n", i, users[i]);
return 0;
}
實施例使用/輸出
$ ./bin/usersptr
users[0] : UserOne
users[1] : UserTwo
users[4] : Straggler
(注:在users
指針的初始化到NULL
需要能夠遍歷並測試是否在上例中已經指定了一個指針)
'users [0] =「UserOne」;'是錯誤。你的編譯器應該爲這一行報告一些東西。如果不是,那麼你需要弄清楚如何調高編譯器的警告級別。 –
你會很好地閱讀一本關於介紹C概念的書 –