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

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

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

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

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

3 回答

?
繁星淼淼

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

如果您不想更改字符串,那么您可以簡(jiǎn)單地

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ù)制到它們中。



查看完整回答
反對(duì) 回復(fù) 2019-10-13
?
三國(guó)紛爭(zhēng)

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

有幾種方法可以在C中創(chuàng)建字符串?dāng)?shù)組。如果所有字符串都要具有相同的長(zhǎng)度(或至少具有相同的最大長(zhǎng)度),只需聲明一個(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)存中。這種方法的問(wèn)題在于內(nèi)部碎片的可能性;如果您有99個(gè)字符串,不超過(guò)5個(gè)字符,但是有一個(gè)字符串,長(zhǎng)度為20個(gè)字符,那么99個(gè)字符串將至少有15個(gè)未使用的字符;這是對(duì)空間的浪費(fèi)。

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

char *strs[NUMBER_OF_STRINGS];

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

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

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

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

但是您可能無(wú)法更改字符串的內(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");

順便說(shuō)一下,

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

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



查看完整回答
反對(duì) 回復(fù) 2019-10-13
?
慕碼人8056858

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

常量字符串:

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

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

哦,你想用史克比對(duì)于賦值,不是=運(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");




查看完整回答
反對(duì) 回復(fù) 2019-10-13
  • 3 回答
  • 0 關(guān)注
  • 378 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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