- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2小时前关门了。
Improve this question
程序永远不会到达printf()
函数,但如果printError()
函数应该被调用,它就会被调用。我已经在这个问题上停留了一段时间,希望得到任何帮助。
我试着替换代码并向代码中添加不同的printf()
函数(编译器没有调试器)
在下面的代码中,我的C代码似乎在for循环之后停止运行:
char *output;
int pairs[676], len, most[2];
scanf("%d", &len);
char chr[2];
char *input = (char *)malloc((1 + len) * (sizeof(char)));
for (int i = -1; i < len; ++i) {
scanf("%c", (input + i));
if ((*(input + i) < 97 || *(input + i) > 122) && *(input + i) != ' ') {
printError();
valid = false;
}
}
printf("%d, valid);
1条答案
按热度按时间qybjjes11#
代码中存在多个问题:
scanf()
调用将导致未定义的行为,因为它将尝试在分配的数组开始之前将char
值存储到input[-1]
中。scanf()
的返回值,以检测无效或丢失的输入。您还应该测试len > 0
,并检查内存分配是否失败。input[i]
,而不是*(input + i)
97
和122
容易混淆。最好使用'a'
和'z'
。printf("%d, valid);
中缺少"
代码无法编译。scanf("%c", (input + i));
读取的第一个字符是用户在长度之后输入的字符。它可能是换行符,导致printError()
被调用。input[len] = '\0';
设置空终止符