将文本文件复制到char *数组中

时间:2018-02-14 02:09:53

标签: c arrays file io

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文件的内容。有什么建议? 我需要数组是单维的

2 个答案:

答案 0 :(得分:0)

您正在计算文件的长度,但您没有使用此信息 无论如何。

char *f_array[256];

这是指向char的指针的256维数组。 f_array[i]是 没有初始化,它指向数字必杀技,传递给它 fscanf会产生未定义的行为。你需要将它声明为某种东西 像这样:

char f_array[255][255];

但是你将自己限制在最多255个字符串,你没有存储它 成一个字符串。你也存储最大。 255个字。使用fgetsfread立即获取所有内容。

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;
}