数组复制循环使每个元素都相同

时间:2018-01-12 21:51:27

标签: c arrays file-io

我正在创建一个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++;
}

我确信这是一件我忽略的简单事情;我觉得无法将字符串复制到数组中。 顺便说一下,这绝对是功课!

1 个答案:

答案 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]); } 分配给文件中的字节数是非常保守的:您知道您不会超过限制,但浪费的数量可能太大。