0

Cで文字列の配列を宣言する方法.それは似ていますか

char str[100][100] ={"this","that","those"};

もしそうなら、値にアクセスする方法..このようにトラバースできますか? (コンパイルエラーは発生しませんが、追加のゴミ文字が表示されます)

int i ,j;
char  c[100][100] = {"this","that"};
for(i = 0 ;c[i] != '\0';++i)
 for(j = 0; c[i][j] != '\0';++j)
   printf("%c",c[i][j]);

eac 文字列の末尾に '\0' を追加する必要がありますか..例:

 char c[100][100]={"this\0","that\0"}
4

3 に答える 3

1
  1. はい、その方法で文字列の配列を宣言できます。

  2. いいえ、そのようにトラバースすることはできません。外側のループの状態が悪いです。文字列(char *)が文字と等しくなることはありません'\0'。内側のループは問題ありません。

  3. いいえ、追加する必要はありません'\0'。これは自動的に行われます。

于 2012-04-08T07:02:25.030 に答える
1

Cで文字列の配列を宣言する方法

大丈夫ですが、これらの文字列を処理するときは、バッファオーバーフローに非常に注意する必要があります。

このようにトラバースできますか?

最初のforループの条件for(i = 0 ;c[i] != '\0';++i)はおそらく間違っておりc[i]、アドレスが0ではない配列であるため失敗することに注意してください。おそらく、[すべての要素を読み取るまで]数字で外側の配列を反復する必要があります。いくつかの特定の文字。nこれを行うには、配列に現在含まれている要素の数を示す別の変数を維持します。

eac文字列の最後に「\0」を追加する必要がありますか。例:

いいえ-コンパイラがそれを追加し'\0'ます。文字列にを追加しなくても問題ありません。

于 2012-04-08T07:03:45.980 に答える
1

c [i]はポインタであるため、「\ 0」とは関係がない
ため、代わりにc [i] [0]を確認する必要があり
ます。「this」のような文字列を入力すると、コンパイラは「\0」を追加します。

char str[100][100] ={"this","that","those"};
int main()
{
    int i ,j;
    char  c[100][100] = {"this","that"};
    for(i = 0 ;c[i][0] != '\0';++i)
    {
        for(j = 0; c[i][j] != '\0';++j)
            printf("%c",c[i][j]);
    }
}
于 2012-04-08T07:06:07.987 に答える