首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:字符比较失败

C:字符比较失败
EN

Stack Overflow用户
提问于 2013-11-21 03:59:18
回答 1查看 87关注 0票数 0

在成功地运行了一个容器之后,我的分离器将不会获得一个应该退出while循环的字符比较。在尝试“0(制表符) 8 (Enter)(ctrl+D)”作为输入后,选项卡被正确地写成空格,但是在rp被增量指向8之后,应该读取8的while循环不会退出,我得到一个seg错误。下面是代码:

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-21 04:21:54

我感觉到,下面的循环进入无限循环。

代码语言:javascript
复制
while( (*rp != '\t') && (*rp != '\0') && (*rp != '\n') ) { /*this loops after a tab*/
    *wp++ = *rp++;

这是因为,您正在检查rp!= '\t'等等,但是这里

代码语言:javascript
复制
if (*rp == '\t') 
{
    rp++;
    tf = lp + ((((wp - lp) / 8) + 1) * 8);
    while ((tf - wp) != 0) 
        *wp++ = 's';
}

您正在用char 's'填充doc数组,这也是通过编写'\t'来完成的,所以上面的循环将无限大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20112171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档