第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在C中創(chuàng)建字符串?dāng)?shù)組?

如何在C中創(chuàng)建字符串?dāng)?shù)組?

C
眼眸繁星 2019-07-22 12:12:11
如何在C中創(chuàng)建字符串?dāng)?shù)組?如果我使用以下代碼,我將嘗試在C中創(chuàng)建一個(gè)字符串?dāng)?shù)組:char (*a[2])[14];a[0]="blah";a[1]="hmm";GCC給了我“警告:來自不兼容指針類型的賦值”。正確的方法是什么?編輯:我很好奇為什么這會(huì)給編譯器一個(gè)警告,因?yàn)槿绻疫@樣做了。printf(a[1]);它正確地打印了“嗯”。
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

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

當(dāng)您這樣做時(shí),您將分配一個(gè)由兩個(gè)指針組成的數(shù)組const char..然后,這些指針將被設(shè)置為靜態(tài)字符串的地址。"blah""hmm".

如果您確實(shí)希望能夠更改實(shí)際的字符串內(nèi)容,則必須執(zhí)行以下操作

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

這將分配兩個(gè)連續(xù)的14數(shù)組。charS每一個(gè),然后將靜態(tài)字符串的內(nèi)容復(fù)制到它們中。



查看完整回答
反對 回復(fù) 2019-07-23
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

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

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", ...};

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

您可以存儲(chǔ)指向char的指針的一維數(shù)組,而不是使用char的二維數(shù)組:

char *strs[NUMBER_OF_STRINGS];

請注意,在本例中,您只分配了內(nèi)存來保存指向字符串的指針;字符串本身的內(nèi)存必須在其他地方分配(或者作為靜態(tài)數(shù)組,或者使用malloc()或calloc()??梢允褂贸跏蓟绦蛄斜?,如前面的示例所示:

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

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

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

但是您可能無法更改字符串的內(nèi)容;即,

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

可能是不允許的。

可以使用malloc()為每個(gè)字符串動(dòng)態(tài)分配緩沖區(qū),并將其復(fù)制到該緩沖區(qū):

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

順便說一下,

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

聲明為指向char的14元素?cái)?shù)組的指針的2元素?cái)?shù)組。


查看完整回答
反對 回復(fù) 2019-07-23
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊


常量字符串:

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

如果我沒記錯(cuò)的話。

哦,你想用史克比對于賦值,不是=運(yùn)算符。strcpy s更安全,但既不符合C89標(biāo)準(zhǔn),也不符合C99標(biāo)準(zhǔn)。

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



查看完整回答
反對 回復(fù) 2019-07-23
  • 3 回答
  • 0 關(guān)注
  • 406 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號