为什么调试器会忽略 while 循环?

Why The debuger neglect the while loops?

这是一个删除字符串c首尾空格的程序,请问哪里出错了? 我已经在调试器中尝试了 运行。好像while循环没有执行,有点疏忽

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
void main()
{
    char c[1000],d[1000];
    gets(c);
    int i=0,j=strlen(c)-1;
    while (c[i]==" ")
    {
        i++;
    }
    while (c[j]==" ")
    {
        j--;
    }
    int k,l=0;
    for (k=i;k<=j;k++)
    {
        d[l]=c[k];
        l++;
    }
    printf(d);
}

在 C 中应该使用单引号来获取 space 字符。如果使用双引号,则会获取指向包含 space 字符和空终止符的字符串的指针,即不一样。

因此将 " " 更改为 ' '

您的编译器应该就此警告您,因为您正在比较 charconst char *。事实上,当我使用默认选项在 gcc 中编译你的代码时,它说:

test.c: In function 'main':
test.c:10:16: warning: comparison between pointer and integer
   10 |     while (c[i]==" ")
      |                ^~
test.c:14:16: warning: comparison between pointer and integer
   14 |     while (c[j]==" ")
      |                ^~

如果您注意编译器警告并修复它们,您的编程之旅将会轻松得多。您还可以将 -Wall 之类的选项传递给编译器,以使其给您更多警告。

您还需要在 d 字符串中添加空终止符。所以在最后一个循环之后添加这一行:

d[l] = 0;