成功运行entabulator之后,我的detabulator不会继续进行应该退出while循环的字符比较。尝试输入“ 0(tab)8(enter)(ctrl + D)”后,制表符正确地写为空格,但是在rp递增指向8之后,应该读取8的while循环不会退出我遇到了段错误。这是代码:
#include <string.h>
#include <stdio.h>
#define MAXLINE 100
char doc[9001];
main(int argc, char *argv[])
{
int max = 0;
char *rp = doc;
char *wp = rp;
char *tf = wp;
char *lp = doc;
while ((*(rp++) = getchar()) != EOF);
*--rp = '\0';
rp = doc;
j = 0;
while ( (*rp != '\0') && (argc == 1)) {
if (*rp == '\n') {
lp = rp + 1;
*wp++ = *rp++;
}
while( (*rp != '\t') && (*rp != '\0') && (*rp != '\n') ) { /*this loops after a tab*/
*wp++ = *rp++;
}
if (*rp == '\t') {
rp++;
tf = lp + ((((wp - lp) / 8) + 1) * 8);
while ((tf - wp) != 0)
*wp++ = 's';
}
}
if (*rp == '\0')
*wp = '\0';
printf("%s\n", doc);
}
最佳答案
我的感觉是,下面的循环进入了无限循环。
while( (*rp != '\t') && (*rp != '\0') && (*rp != '\n') ) { /*this loops after a tab*/
*wp++ = *rp++;
这是因为,您正在检查
rp!= '\t'
等,但是在这里if (*rp == '\t')
{
rp++;
tf = lp + ((((wp - lp) / 8) + 1) * 8);
while ((tf - wp) != 0)
*wp++ = 's';
}
您用char
doc
填充了's'
数组,并且该数组也覆盖了'\t'
,因此上述循环将变为无限。关于c - C:字符比较失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20112171/