首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我在函数(C)的末尾得到一个分段错误?

为什么我在函数(C)的末尾得到一个分段错误?
EN

Stack Overflow用户
提问于 2018-10-11 07:59:10
回答 1查看 143关注 0票数 0

我在readFirst()的末尾遇到了一个分段错误。如果我放入一条print语句来检查,有时print语句不会出现。代码会编译,但当我运行它时,它只是按照预期打印文件,然后在return语句中给出错误。我不知道问题是什么,也不知道如何解决它。

代码语言:javascript
复制
int readFirst(FILE *file){
    int c;
    int linecount = 0;
    int newLineCounter = 0;
    while ((c = fgetc(file)) != EOF)
    {
        printf("%c", c);
        if(c == '\n'){
            newLineCounter++;
        }
            linecount++;
    }
    file = file + '\0';
    printf("check 3");
    //printf("\n");

    printf("%i",newLineCounter);
    return newLineCounter;
}

int main (int argc, char **argv)
{
    char *infile = NULL;
    char *outfile = NULL;
    FILE *file = stdin;
    FILE *text = stdout;
    char ch[200];
    int iFlag = 0;
    int oFlag = 0;
    char *iValue = NULL;
    int index;
    int i;

    opterr = 0;

    while ((i = getopt (argc, argv, "i:o:")) != -1) {
            switch (i)
            {
            case 'i':
                iFlag = 1;
            infile = optarg;
                break;
            case 'o':
            oFlag = 1;
                outfile = optarg;
                break;
            case '?':
                if(optopt == 'i') {
                fprintf(stderr, "Missing mandatory input option\n");
            } else if (optopt == 'o') {
                fprintf(stderr, "Missing mandatory input option\n");
                } else {
                fprintf(stderr, "Invalid option received\n");
                }
            break;
            }
    }

    if (infile){
        file = fopen(infile, "r");
        if (file == NULL){
            //printf("cannot open input file \n");
            exit(1);
        }
        //fprintf(file,"%s", infile);
        //fprintf(file,"%s", infile);

    }
    printf("check 1");
    int lines;
    lines = readFirst(file);
    printf("check 2");
    printf("%i", lines);

    char labels [lines][6];

    int c;
    int lineCount = 0;
    int curCol = 0;
    int flag = 0;


    for(lineCount = 0; i < lines; lineCount++){
        for(curCol = 0; i < 6; curCol++){
            labels[lineCount][curCol] = ' ';
        }
    }

    while(lineCount < lines && (c = fgetc(file)) != EOF){
        if(flag != 0){
            if(c != ' ' || c != '\t'){
                labels[lineCount][curCol] = c;
                curCol++;
            }else {
                curCol = 0;
                flag = 0;
            }
        }

        if(c == '\n'){
            flag = 1;
            lineCount++;
        }
    }


    printf("%i", lineCount);

    for(lineCount = 0; i < lines; lineCount++){
        for(curCol = 0; i < 6; curCol++){
            printf("%c",labels[lineCount][curCol]);
        }
    }


}
EN

回答 1

Stack Overflow用户

发布于 2018-10-11 08:24:20

问题就在这里,在内部循环中

代码语言:javascript
复制
for(lineCount = 0; i < lines; lineCount++){
    for(curCol = 0; i < 6; curCol++){
        printf("%c",labels[lineCount][curCol]);
    }
}

变量i在该循环中永远不会更新,因此两个循环都将永远运行,从而导致对标签的越界数组访问。

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

https://stackoverflow.com/questions/52750315

复制
相关文章

相似问题

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