#include <stdio.h>
#include <string.h>
int main()
{
//read any text file
char const* const fName = "database-large.txt";
FILE* fp = fopen(fName, "r");
char *ptr;
char substr[5000];
long i=0, j=0;
// if file not opened
if(!fp){
printf("n Error in open : %s ", fName);
return -1;
}
// to strore each line
char line[5000];
// read line by line
while (fgets(line, sizeof(line), fp)) {
//to extract mailid in between "From:" and "n"
ptr = strstr(line, "Date:");
i=ptr-line;
while(line[i] !='n')
{
substr[j] = line[i+9];
i++;
j++;
}
printf("%sn", substr);
}
// to close the file
fclose(fp);
return 0;
}
为什么这个编译但是给了我一个分段错误,当我运行它时,因为行&;while(line[I] !='n')&;这是我在运行代码时遇到的唯一问题。
需要检查strstr
是否返回空指针。否则调用strstr
ptr = strstr(line, "Date:");
i=ptr-line;
可以在ptr
等于NULL
时调用未定义行为。
第二个问题是,您没有在每次while循环的迭代中将变量j
重置为0
。
第三个问题是,如果在调用
时使用转换说明符%s
,数组substr
必须包含字符串printf("%sn", substr);
否则你需要写
printf("%.*sn", ( int )j, substr);