簡體   English   中英

如何更改二維數組中的單個字符 (C)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM