我想将.txt文件的内容保存到数组中。这里的事情是我首先使用位置到另一个数组,我想使用保存我的位置的数组将文件的内容存储到数组中。 代码似乎不起作用。帮助赞赏。
#include <stdio.h>
#include <string.h>
int main()
{
char location[50],input[1000]={0};
int i=0;
printf("Enter your file location:\n");
scanf("%999[^\n]",location);
FILE *ptr;
ptr = fopen("location", "r");
while(!EOF)
{
char c;
c = (char) fgetc(ptr);
input[i] = c;
printf("%c", input[i]);
i++;
}
input[i] = NULL;
printf("%s",input);
getch();
return 0;
}
答案 0 :(得分:2)
EOF
is something different(它是一个宏,因此!EOF
始终是一个常量值,并且实际上不会检查任何内容)。也许你打算使用feof()
。或者,而是:
int c;
while ((c = fgetc(ptr)) != EOF)
{
...
答案 1 :(得分:2)
多个问题
缓冲区scanf()
的大小错误,应测试结果。
char location[50];
// scanf("%999[^\n]",location);
if (1 != scanf("%49[^\n]",location)) HandleError();
fopen()
(@Mat)参数错误。添加测试
// ptr = fopen("location", "r");
ptr = fopen(location, "r");
if (ptr == NULL) HandleOpenError();
错误使用EOF和c
类型(@Cornstalks)
// while(!EOF) {
// char c;
// c = (char) fgetc(ptr);
int c;
while ((c = fgetc(ptr)) != EOF) {
错误的终止。
// input[i] = NULL;
input[i] = '\0';
UB,如果文件长度> = 1000;
检查@Fiddling Bits为整个文件分配缓冲区的答案
建议size_t fileLength
而不是long int fileLength
添加free(pFileContents);
否fclose()
fclose(ptr);
return 0;
次要:printf("%s",input);
如果文本文件不常见且已嵌入\0
,则不会打印出整个文件。
答案 2 :(得分:1)
首先,您必须确定文件的长度:
fseek(ptr, 0, SEEK_END);
long int fileLength = ftell(ptr);
然后,创建一个足够大的缓冲区来保存文件的全部内容:
char *pFileContents = malloc(fileLength);
if(!pFileContents)
return -1; // Error
最后,将文件的内容复制到新创建的缓冲区:
rewind(ptr);
if(fread(pFileContents, 1, fileLength, ptr) != fileLength)
return -1; // Error
fclose(ptr);