亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C中創建字符串數組?

如何在C中創建字符串數組?

C
慕村9548890 2019-12-19 14:13:15
如何在C中創建字符串數組?如果我使用以下代碼,我將嘗試在C中創建一個字符串數組:char (*a[2])[14];a[0]="blah";a[1]="hmm";GCC給了我“警告:來自不兼容指針類型的賦值”。正確的方法是什么?編輯:我很好奇為什么這會給編譯器一個警告,因為如果我這樣做了。printf(a[1]);它正確地打印了“嗯”。
查看完整描述

3 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

如果您不想更改字符串,那么您可以簡單地

const char *a[2];a[0] = "blah";a[1] = "hmm";

當您這樣做時,您將分配一個由兩個指針組成的數組const char..然后,這些指針將被設置為靜態字符串的地址。"blah""hmm".

如果您確實希望能夠更改實際的字符串內容,則必須執行以下操作

char a[2][14];strcpy(a[0], "blah");strcpy(a[1], "hmm");

這將分配兩個連續的14數組。charS每一個,然后將靜態字符串的內容復制到它們中。



查看完整回答
反對 回復 2019-12-20
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

有幾種方法可以在C中創建字符串數組。如果所有字符串都要具有相同的長度(或至少具有相同的最大長度),只需聲明一個二維char數組并根據需要分配:

char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1];...strcpy(strs[0], aString); 
// where aString is either an array or pointer to charstrcpy(strs[1], "foo");

還可以添加初始化程序列表:

char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1] = {"foo", "bar", "bletch", ...};

這假設初始化器中字符串的大小和數量與數組維度匹配。在這種情況下,每個字符串文本的內容(它本身是一個以零結尾的char數組)被復制到分配給STR的內存中。這種方法的問題在于內部碎片的可能性;如果您有99個字符串,不超過5個字符,但是有一個字符串,長度為20個字符,那么99個字符串將至少有15個未使用的字符;這是對空間的浪費。

您可以存儲指向char的指針的一維數組,而不是使用char的二維數組:

char *strs[NUMBER_OF_STRINGS];

請注意,在本例中,您只分配了內存來保存指向字符串的指針;字符串本身的內存必須在其他地方分配(或者作為靜態數組,或者使用malloc()或calloc()??梢允褂贸跏蓟绦蛄斜恚缜懊娴氖纠荆?/trans>

char *strs[NUMBER_OF_STRINGS] = {"foo", "bar", "bletch", ...};

不是復制字符串常量的內容,而是簡單地存儲指向它們的指針。請注意,字符串常量可能不可寫;您可以重新分配指針,如下所示:

strs[i] = "bar";strs[i] = "foo";

但是您可能無法更改字符串的內容;即,

strs[i] = "bar";strcpy(strs[i], "foo");

可能是不允許的。

可以使用malloc()為每個字符串動態分配緩沖區,并將其復制到該緩沖區:

strs[i] = malloc(strlen("foo") + 1);strcpy(strs[i], "foo");

順便說一下,

char (*a[2])[14];

聲明為指向char的14元素數組的指針的2元素數組。



查看完整回答
反對 回復 2019-12-20
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

常量字符串:

const char *strings[] = {"one","two","three"};

如果我沒記錯的話。

哦,你想用史克比對于賦值,不是=運算符。strcpy s更安全,但既不符合C89標準,也不符合C99標準。

char arr[MAX_NUMBER_STRINGS][MAX_STRING_SIZE]; strcpy(arr[0], "blah");




查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 415 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號