程序工作得很好但在gdb中调试时会收到段错误

时间:2015-06-20 15:25:14

标签: c debugging segmentation-fault gdb

这是我的测试代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
char arr[20]={0};

char* findWord(FILE* fs)
{

      static long pos=0;
      fseek(fs,pos,SEEK_SET);
        char chr[1]={0};
        bool flag1=false;
        bool flag2=false;
        while((1==fread(chr,1,1,fs))&&(!(flag1==false&&flag2==true))){
                                        // This would make the findword() function
                                        // find only a single word once
            if(chr[0]!=32){
                strncat(arr,chr,1);
                flag2=true;
                flag1=true;
            }
            else
                flag1=false;
        }


        pos=ftell(fs)-1;  //this is a little funny.
                          //maybe everytime you use "fseek()", "ftell()", the
                            //file-position will move one byte ahead. 
        return arr;
    }

int main()
{
    FILE* fs=fopen("testfile.txt","r");
    if(!fs){
        printf("Failed to open file!");
        exit(1);
    }
    char a;
    while(1){
        printf("Again?(y/n)");
        scanf("%c%*c",&a);
        if(a=='y'){
        memset(arr,'\0',20);
        printf("%s\n",findWord(fs));
    }
        else
            continue;
    }

    return 0;
}

这个程序在编译后工作得很好。它打开一个文件,它只包含一些普通的字符和空格(这个文件已被格式化,只包含普通字符和空格。甚至不包括换行符),然后逐个过滤掉单词。例如,如果I am really fine...中有字符testfile.txt,则程序会提示您,然后打印出I,然后打印am,然后{{1等等。

无论如何,一个非常简单的程序。但非常奇怪的是,在使用gdb进行调试时,我在really行遇到了段错误。而这只是一个简单的定义!!如何在变量定义中获得段错误?!

复制此片段并尝试它。(记住更改文件名。并确保文件在文件末尾之前不包含换行符。)然后使用gdb重试。

0 个答案:

没有答案