我无法找出下面代码的错误行为的原因这是一个简单的代码,在输入*或达到数组大小之前接受字符,然后打印从键盘读取的字符看起来阅读部分还不错另外,如果在数组大小达到之前输入*一切正常但如果我不输入*并等到在读取部分达到数组大小,我就有麻烦了打印时,它会打印读取的字符,但之后会打印一些垃圾在调试器中运行,但索引为3或更多时while循环不会中断。
int main()
{
char myStr [3];
unsigned int index=0;
printf("Enter Single characters. Enter * to stop\n");
do
{
scanf(" %c",&myStr[index]);
index++;
} while ((myStr[index-1]!='*')&&((index)<(sizeof(myStr)/sizeof(myStr[0]))));
index=0;
while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
{
printf("%c",myStr[index]);
index++;
}
printf("\n");
return(0);
}
最佳答案
代码在printf
循环的最后一次迭代中遇到未定义的行为
while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
{
...
事实上
while ((myStr[3] ....
访问超出界限。
要解决此问题,请执行以下操作:
while ((index < (sizeof(myStr)/sizeof(myStr[0]))) && (myStr[index] != '*'))
Boolean short-circuiting将处理未执行的
myStr[3]
。关于c - while循环不中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40448982/