为什么调试器会忽略 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 字符和空终止符的字符串的指针,即不一样。
因此将 " "
更改为 ' '
。
您的编译器应该就此警告您,因为您正在比较 char
和 const 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;
这是一个删除字符串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 字符和空终止符的字符串的指针,即不一样。
因此将 " "
更改为 ' '
。
您的编译器应该就此警告您,因为您正在比较 char
和 const 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;