这是我的测试代码:
#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重试。