我无法找出下面代码的错误行为的原因这是一个简单的代码,在输入*或达到数组大小之前接受字符,然后打印从键盘读取的字符看起来阅读部分还不错另外,如果在数组大小达到之前输入*一切正常但如果我不输入*并等到在读取部分达到数组大小,我就有麻烦了打印时,它会打印读取的字符,但之后会打印一些垃圾在调试器中运行,但索引为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/

10-13 03:29