为什么该程序不停止接受输入?

时间:2019-07-13 18:21:52

标签: c string

我编写了一个C程序来使用指针反转字符串,我面临的问题是我不使用循环就无法接受字符串。 都不是完整的字符串打印,而是仅打印单个字符。

我尝试使用循环访问字符串,但效果很好,但我不打算这样做。

    #include<stdio.h>
    int main()
    {
      char s[10];
      char temp;
      scanf("%s", s);
      char *start=s;
      char *end=s;
      while(*end!='\0')
       {
        end++;
       }
        end--;
      while(start<end)
      {
        temp=*start;
        *start=*end;
        *end=temp;
      }
      printf("%s", s);
    }

1 个答案:

答案 0 :(得分:2)

问题在于,在第二个循环中,您永远不会减少end指针,也不会增加start指针。

尝试

while (start < end)
{
    temp = *start;
    *start++ = *end;
    *end-- = temp;
}

另一方面,如果用户使用您的方法未输入任何内容,则可能会遇到问题

while (*end != '\0')
{
    end++;
}
end--; // UB when strlen(s) = 0

切换到

if (*end != 0)
{
    end += strlen(s) - 1;
}

此外,最好使用scanf来限制字符串的长度,以避免缓冲区溢出:

scanf("%9s", s);