【发布时间】:2018-09-01 20:04:28
【问题描述】:
我是 C 新手,在尝试输入字符串时遇到了问题。更具体地说,当打印字符串时,字符“N”出现在它的末尾,因此,我无法测量确切的字符数。这是我的代码:
int main()
{
int j = 0;
char c[15];
printf("Give surname: ");
scanf(" %s", c);
for (int i = 0; i<sizeof(c) / sizeof(c[1]); i++)
{
if (isalpha(c[i]))
{
printf("%c ", c[i]);
j++;
}
}
printf("\nNumber of characters: %d", j);
return 0;
}
例如:如果输入是“john”,那么我会得到以下输出:
我做错了什么?
【问题讨论】:
-
您的循环迭代的字符数远远多于从
stdin读取的字符数。 -
一个可能的原因是
scanf在您输入回复时在字符串末尾添加了一个 0 字节,但您并没有对此进行检查,而是输出了 15 个字符无论。您应该了解 C 中的字符串函数,例如strlen,而不是手动输出字符,也许只需让printf为您完成? -
你没有初始化
c,所以它在scanf()设置的部分后面包含不确定的数据。如果您通过一个明显打印每个字符的程序发送输出(例如od或xxd -g 1),您会在输出中看到很多其他字符——一个空字节和一些其他非打印(控制)字符,还有比你想象的更多的空格。 -
发布的代码无法编译!。它似乎缺少所需头文件的包含语句。您是否希望我们猜测您的实际代码包含哪些头文件?
-
运算符
sizeof返回一个size_t,(通常是一个无符号长整数)但是,发布的代码将该值与int进行比较