FILE *fp;
char *f_array[256];
int f_length;
int *a = 0;
fp = fopen("test.txt", "r");
fseek(fp, 0, SEEK_END);
f_length = ftell(fp);
printf("%d\n\n", f_length);
int n = 1, i = 0;
while (n > 0)
{
n = fscanf(fp, "%s", f_array[i]);
i++;
}
我正在尝试将.txt文件的内容复制到char *数组中。很像InternetReadFile和lpbuffer会发生什么。但是,我似乎无法做到这一点。我需要我的数组按字符填充.txt文件的内容。有什么建议? 我需要数组是单维的
答案 0 :(得分:0)
您正在计算文件的长度,但您没有使用此信息 无论如何。
char *f_array[256];
这是指向char
的指针的256维数组。 f_array[i]
是
没有初始化,它指向数字必杀技,传递给它
fscanf
会产生未定义的行为。你需要将它声明为某种东西
像这样:
char f_array[255][255];
但是你将自己限制在最多255个字符串,你没有存储它
成一个字符串。你也存储最大。 255个字。使用fgets
或
fread
立即获取所有内容。
char file[f_length + 1];
rewind(fp);
fread(file, f_length, 1, fp);
file[f_length] = 0; // terminate the string
printf("Whole file is: %s\n", file);
这里将整个文件存储在char
的数组中。设定后也
最后的文件,你需要将文件倒回到开头,否则
你没有读任何东西。
答案 1 :(得分:0)
问题主要与您的数据类型有关。您想将文件存储在内存中。那将是一个字符(字节)数组,但是你创建了一个"指针数组":
char *f_array[256];
当你可能只想:
char f_array[256];
然后,要按照您的要求将字符读入该数组,请使用fgetc
。请注意,fgetc
在使用fread
的单个函数调用中读取整个文件的效率要低得多。内核:
while ( EOF != (c = fgetc( fp )) && ++i < MAX_LEN )
f_array[ i ] = c;
在一个工作示例的背景下:
#include <stdio.h>
int main ( ) {
const size_t MAX_LEN = 255;
FILE * fp;
char f_array[ MAX_LEN +1];
int c;
size_t i = -1;
f_array[ MAX_LEN +1] = 0;
fp = fopen("test.txt","r");
if ( NULL == fp )
perror("Error opening file");
else {
while ( EOF != (c = fgetc( fp )) && ++i < MAX_LEN )
f_array[ i ] = c;
fclose (fp);
}
f_array[ i ] = 0;
printf("%zu bytes read\n\n", i);
printf("Content read:\n%s\n", f_array);
return 0;
}