我有一个字符串如下:
char myString[] = "Amazing String";
我想循环遍历字符串并按如下方式打印字符:
int i = 0;
for (i = 0;i < sizeof(myString);i++){
printf("%s\n", myString[i]);
}
但由于某些原因,我得到整数值而不是字符本身。
很抱歉,如果这是一个完全愚蠢的问题,但我看不出我做错了什么。
答案 0 :(得分: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()
上使用sizeof()
?那么,在这个特殊情况下,它不会有所作为;但是strlen()
用于给出字符串中可打印字符的数量,而sizeof
将返回数组的大小(可打印字符+ 1为空终止符)。
int len1 = sizeof(myString); // 15
int len2 = strlen(myString); // 14
A)你不会看到那些打印,所以它没有帮助
B)如果你养成在字符串上使用sizeof
的习惯,你可以在你传递数组的函数中使用它(在这种情况下数组将衰减为指针),然后你将恢复大小一个char *
而不是字符数。如果您已完成char *myString = "Amazing String";
答案 1 :(得分:1)
当您对单个字符使用"%s"
时,您正在使用"%c"
符号作为字符串:
printf("%c\n", myString[i]);
// ^^
答案 2 :(得分:0)
int i = 0;
for (i = 0;i < sizeof(myString);i++){
printf("%c\n", myString[i]);
}
%c而不是%s和sizeof()不是一个好选择。试试strlen(myString)