0

次のような文字列があります。

char myString[] = "Amazing String";

次のように、文字列をループして文字を出力したいと思います。

int i = 0;
for (i = 0;i < sizeof(myString);i++){
    printf("%s\n", myString[i]);
}

しかし、何らかの理由で、文字自体ではなく整数値を取得します。

これが完全にばかげた質問である場合は申し訳ありませんが、何が間違っているのかわかりません。

4

3 に答える 3

4

文字列の長さの代わりに使用strlen()し、文字を出力したい ( %c):

int i = 0;
for (i = 0;i < strlen(myString);i++){  // to get a string's length, use strlen
    printf("%c\n", myString[i]);       // to print a single character, use %c
}

strlen()over をsizeof()使用する理由 まあ、この特定の例では、違いはありません。ただしstrlen()、文字列内の印刷可能な文字数を提供するためsizeofのものですが、配列のサイズを返します (印刷可能な文字 + null ターミネータの場合は 1)。

int len1 = sizeof(myString); // 15
int len2 = strlen(myString); // 14

A) 表示されないので役に立たない
B) 文字列を使用する習慣を身につけsizeofたら、配列を渡す関数内で使用することができます (この場合、配列はポインターに減衰します) ) するとchar *、文字数ではなくa のサイズが返されます。行った場合、同じ関数内で同じことが適用されますchar *myString = "Amazing String";

于 2013-06-07T18:52:07.903 に答える
1

単一の文字"%s"に使用する必要があるときに、文字列の記号を使用しています。"%c"

printf("%c\n", myString[i]);
//      ^^
于 2013-06-07T18:50:58.313 に答える
0
int i = 0;
for (i = 0;i < sizeof(myString);i++){
    printf("%c\n", myString[i]);
}

%s の代わりに %c と sizeof() は適切な選択ではありません。試すstrlen(myString)

于 2013-06-07T18:51:26.580 に答える