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将返回数组的大小(可打印字符 + 1 用于空终止符)。

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

A)你不会看到打印出来的,所以它没有帮助
B)如果你习惯sizeof在字符串上使用,你可能会在你将数组传递给的函数中使用它(在这种情况下,数组将衰减为指针) 然后你会得到 a 的大小而char *不是字符数。如果您已经完成,同样适用于同一功能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]);
}

%c 而不是 %s 和 sizeof() 不是一个好的选择。尝试strlen(myString)

于 2013-06-07T18:51:26.580 回答