从字符串中读取字符并获取整数值

时间:2013-06-07 18:49:16

标签: c

我有一个字符串如下:

char myString[] = "Amazing String";

我想循环遍历字符串并按如下方式打印字符:

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

但由于某些原因,我得到整数值而不是字符本身。

很抱歉,如果这是一个完全愚蠢的问题,但我看不出我做错了什么。

3 个答案:

答案 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)