[英]how do you change a single char in a 2D array (C)
如何在 C 中更改二維數組中的單個字符? 我試過了,但無法編譯...
char *words[50][20];
words[0][0] = "hello";
現在如何將“h”更改為“j”以使其成為“jello”?
您不應該嘗試這樣做,因為修改字符串文字是未定義的行為。 這樣做是合理的,
const char *p = "Hello";
words[0][0]=malloc(strlen(p)+1);
if(words[0][0]==NULL){
perror("malloc");
exit(1);
}
memcpy(words[0][0],p,strlen(p)+1);
請記住,您已經聲明了一個char*
的二維數組 - 這就是為什么首先使用malloc
分配內存然后復制字符串文字的原因。 所有這些都可以通過 POSIX 指定的strdup
來完成
words[0][0]=strdup("Hello");
在 C 標准中明確提到修改字符串文字是未定義的行為。 出於上述原因,您不應該使用您編寫的代碼。
進行更改后,您可以進行諸如words[0][0][0]='j'
類的更改,這將是正確的代碼。
還要仔細重新考慮您的設計。 我們很少需要char*
二維數組你需要它嗎? 如果不是,請嘗試使用較小的構造使設計更簡單。
char *words[50];
現在你可以讓每個指針指向包含不同字母數的單詞。 代碼與之前的情況非常相似 - 但不是使用words[0][0]
而是使用words[0]
,類似於
words[0]=malloc(strlen(p)+1);
...
或者words[0]=strdup("Hello");
.
下面給出了討論字符串文字的標准部分,來自6.4.5p7 (注意數組表示字符串文字)
如果這些數組的元素具有適當的值,則未指定這些數組是否不同。 如果程序嘗試修改這樣的數組,則行為是 undefined 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.