如何在C中读取文件并将字符存储在变量中

时间:2012-02-03 05:19:16

标签: c file fopen

我是C的全新人,需要帮助解决这个问题。 我用fopen()读取文件,然后使用fgetc()获取它的内容。我想知道的是如何访问fgetc()返回的行,如果我可以将第4到第8个字符放入char数组中。下面是我在网上找到的一个例子,但我很难解析数据返回,我仍然没有对C的理解,也没有得到如何用int来存储一行字符。

    FILE *fr;
fr = fopen("elapsed.txt", "r");
int n = fgetc(fr);
    while(n!= EOF){
        printf("%c", n);
        n = fgetc(fr);
    }   printf("\n");

3 个答案:

答案 0 :(得分:3)

下面 1首先打开文件 2获取文件大小 3分配大小到字符指针 4并从文件中读取数据

FILE *fr;
char *message;
fr = fopen("elapsed.txt", "r");
/*create variable of stat*/
struct stat stp = { 0 };
/*These functions return information about a file. No permissions are required on the file itself*/
stat("elapsed.txt", &stp);
/*determine the size of data which is in file*/
int filesize = stp.st_size;
/*allocates the address to the message pointer and allocates memory*/
message = (char *) malloc(sizeof(char) * filesize);
if (fread(message, 1, filesize - 1, fr) == -1) {
    printf("\nerror in reading\n");
    /**close the read file*/
    fclose(fr);
    /*free input string*/
    free(message);
}
printf("\n\tEntered Message for Encode is = %s", message);

PS不要忘记添加#include <sys/stat.h>

答案 1 :(得分:1)

您没有使用fgetc检索一行。您正在从文件中一次检索一个字符。该示例保持检索字符,直到EOF字符被加密(文件结束)。看看fgetc的这个描述。

http://www.cplusplus.com/reference/clibrary/cstdio/fgetc/

在while循环的每次迭代中,fgetc将检索单个字符并将其放入变量“n”。可以帮助你在C中使用“字符”的东西就是把它想象成一个字节,而不是实际的字符。你在这里不理解的是int是4个字节,字符是1个字节,但两者都可以为相同的ASCII字符存储相同的位模式。唯一不同的是内部变量的大小。

上面的示例显示了一个带有“%c”的printf,这意味着将值取为“n”并将其视为ASCII字符。

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

您可以在while循环中使用计数器来跟踪您的位置,以便从文件中找到第4和第8个值。您还应该考虑如果输入文件小于最大大小会发生什么。

希望有所帮助。

答案 2 :(得分:0)

好吧看看它的盒子尺寸我可以有一个30厘米x 30厘米的盒子,可以容纳1个泡沫字母。现在这个函数我称之为'可以'返回一个60厘米x 60厘米的字母但99%可能会返回一个30厘米x 30厘米的字母,因为我知道它的读数 - 我知道如果我给它一个60厘米x 60厘米的盒子结果永远合情合理。

但如果我确定结果总是一个30厘米x 30厘米的盒子,那么我知道我可以转换一个函数的结果,该函数返回一个60厘米x 60厘米的盒子而不会丢失任何东西