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

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

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

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

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

3 回答

?
蕪湖不蕪

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

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

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

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

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

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

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



查看完整回答
反對 回復(fù) 2019-09-03
?
慕妹3146593

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

有幾種方法可以在C中創(chuàng)建字符串?dāng)?shù)組。如果所有字符串都要具有相同的長度(或至少具有相同的最大長度),只需聲明一個二維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ù)組維度匹配。在這種情況下,每個字符串文本的內(nèi)容(它本身是一個以零結(jié)尾的char數(shù)組)被復(fù)制到分配給STR的內(nèi)存中。這種方法的問題在于內(nèi)部碎片的可能性;如果您有99個字符串,不超過5個字符,但是有一個字符串,長度為20個字符,那么99個字符串將至少有15個未使用的字符;這是對空間的浪費。

您可以存儲指向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)容,而是簡單地存儲指向它們的指針。請注意,字符串常量可能不可寫;您可以重新分配指針,如下所示:

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

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

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

可能是不允許的。

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

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

順便說一下,

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

聲明為指向char的14元素數(shù)組的指針的2元素數(shù)組。




查看完整回答
反對 回復(fù) 2019-09-03
?
翻過高山走不出你

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

常量字符串:

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

如果我沒記錯的話。

哦,你想用史克比對于賦值,不是=運算符。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-09-03
  • 3 回答
  • 0 關(guān)注
  • 409 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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