【发布时间】:2015-07-30 18:38:21
【问题描述】:
我有这段代码可以提取两个指定字符串之间的字符串,特别是<title> 和</title>。但是当我运行程序时,我得到Segmentation Fault: 11 任何解决方案?
int main(){
struct stat st;
stat("test.txt", &st);
int size = st.st_size;
printf("%d\n", size);
FILE *f = fopen("test.txt", "rb");
char *bytes = (char*)malloc(size);
fread(bytes,size,1,f);
fclose(f);
parser(bytes);
return 0;
}
void parser(char *bytes){
struct stat st;
stat(bytes, &st);
int size = st.st_size;
char *output = (char*)malloc(size);
char *ptr = strstr(bytes, "<title>");
char *ptr2 = strstr(ptr, "</title>");
if(ptr2){
strncpy(output, ptr+7, (ptr2 - (ptr+7)));
puts(output);
free(output);
parser(ptr2);
}
free(bytes);
free(output);
}
【问题讨论】:
-
您正在测试 'yeah.txt' 的大小,然后打开 'test.txt'?
-
因为你
stat文件的内容而不是parser中的文件名?您的 char 缓冲区bytes和output不是以 null 结尾的,这是<string.h>中的函数所必需的,例如strstr. -
@narb 抱歉,它应该是 'test.txt' 而不是 'yeah.txt'
-
@MiguelLorenzoPanagsagan:专业提示:使用变量作为文件名,而不是在每次出现时都对其进行硬编码,因此您只需将其维护在一个地方。
-
只是一个简单的txt文件。
Hello <title>Hello</title> <title>Hi</title> hello <title>hello</title>
标签: c parsing segmentation-fault