我有 lineget 函数返回char *
(它检测到'\n'
)和NULL
on EOF
。在main()
我试图识别该行中的特定单词。我使用了strtok:
int main(int argc, char **argv)
{
char *line, *ptr;
FILE *infile;
FILE *outfile;
char **helper = NULL;
int strtoks = 0;
void *temp;
infile=fopen(argv[1],"r");
outfile=fopen(argv[2],"w");
while(((line=readline(infile))!=NULL))
{
ptr = strtok(line, " ");
temp = realloc(helper, (strtoks)*sizeof(char *));
if(temp == NULL) {
printf("Bad alloc error\n");
free(helper);
return 0;
} else {
helper=temp;
}
while (ptr != NULL) {
strtoks++;
fputs(ptr, outfile);
fputc(' ', outfile);
ptr = strtok(NULL, " ");
helper[strtoks-1] = ptr;
}
/*fputs(line, outfile);*/
free(line);
}
fclose(infile);
fclose(outfile);
return 0;
}
现在我不知道如何将每个标记化的单词放入一个数组(我char ** helper
为此目的创建),以便它可以在qsort
like中使用qsort(helper, strtoks, sizeof(char*), compare_string);
。
广告。2 即使它会起作用 - 我不知道如何清除该行,然后继续对下一行进行排序。怎么做?
我什至使 valgrind 崩溃(使用上面提供的代码)->“valgrind:‘不可能’发生了:被致命信号杀死”
错误在哪里?