我正在创建一个C程序,它应该读取文件并对文件包含的字符串进行排序。为此,我试图将文件中的每个字符串复制到char*
数组中,但遇到了问题。下面的代码最终用文件中的最后一个字符串填充整个数组,我不知道发生了什么。我已经测试了循环,它确实完美地完成了文件并将每个字符串复制到数组中,但每次循环迭代都会使数组中的每个元素都等于buff
。
// find the size of the file
fseek(fp, 0L, SEEK_END);
long fileSize = ftell(fp);
rewind(fp);
char* fileContents[fileSize]; // we're gonna copy the file into here
char buff[255];
long stringsInFile = 0L;
while( fgets(buff, 255, (FILE*) fp) ) {
// copy the file into the array & get the number of strings
fileContents[stringsInFile] = buff;
stringsInFile++;
}
我确信这是一件我忽略的简单事情;我觉得无法将字符串复制到数组中。 顺便说一下,这绝对是功课!
答案 0 :(得分:1)
这是因为您继续为指针数组<div class="background first">
<div class="background second active">
<div class="background third">
<div class="background fourth">
的每个元素分配相同的数组指针buff
。
除非您希望将fileContents
内的所有字符串预分配到最大值255,否则您需要在作出分配之前复制fileContents
:
buf
由于此代码使用动态分配,因此在完成后需要while( fgets(buff, 255, (FILE*) fp) ) {
// copy the file into the array & get the number of strings
size_t len = strlen(buff);
char *copy = malloc(len+1);
strcpy(copy, buf);
fileContents[stringsInFile] = copy;
stringsInFile++;
}
分配的内存:
free
最后,您将for (int i = 0 ; i != stringsInFile ; i++) {
free(fileContents[i]);
}
分配给文件中的字节数是非常保守的:您知道您不会超过限制,但浪费的数量可能太大。