成功运行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/

10-11 11:08