【发布时间】:2015-11-22 02:59:17
【问题描述】:
我正在创建一个函数char** read_from_file(char* fname, int * size),它从文件fname 中读取所有单词并将它们作为char** 返回。我的文件只有 5 个字,每行只有一个字。然后我有另一个函数print_strings(char** words, int num_words) 打印字符串。
我有 3 个问题:
当我将索引与
< *size进行比较时,我得到“指针和整数之间的比较”我无法将文字存储在
**words我不确定如何返回所有单词。
这是我的代码:
void test_sort(char* fname){
int i;
int num_words;
char** words = read_from_file(fname, &num_words);
printf("\n ORIGINAL data:\n");
print_strings(words, num_words);
}
在主要:
int main(){
// test sorting array of string by string length
test_sort("data.txt");
}
阅读功能
char** read_from_file(char* fname, int * size) {
char** words = (char **)malloc(N_MAX);
FILE *ifp;
ifp = fopen(fname, "r");
if(ifp == NULL){
fprintf(stderr, "Can't open file\n");
exit(1);
}
int index;
while (!feof(ifp)){
for(index = 0; index < size; index++)
{
fscanf(ifp,"%s", words[index]);
}
}
fclose(ifp);
return words;
}
【问题讨论】:
-
不要在 C 中转换
malloc& friends 和void *一般的结果。 -
不要在这里使用
feof()。改为测试fscanf()的结果。谁或什么文字建议feof()? -
char** words = (char **)malloc(N_MAX);应该是char** words = malloc(N_MAX * sizeof *words);然后您必须为每一行(单词)分配。char buf[64] = {0}; size_t index = 0; while (fgets (buf, 64, ifp)) { words[index] = malloc (65); strncpy (word[index++], buf, 64); }(假设每行 1 个单词,单词全部 -
@chux 这是我在网上看到的。