首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中读取文件并将字符存储在变量中

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

Stack Overflow用户
提问于 2012-02-03 13:19:16
回答 3查看 6.6K关注 0票数 1

我对C语言完全陌生,在这方面非常需要帮助。我正在使用fopen()读取一个文件,然后使用fgetc()获取其中的内容。我想知道的是如何访问fgetc()返回的行,所以我是否可以将第4-8个字符放入char数组中。下面是我在网上找到的一个例子,但我在解析数据返回时遇到了困难,我仍然对C语言没有很好的理解,也不知道如何使用int来存储一行字符。

代码语言:javascript
运行
复制
    FILE *fr;
fr = fopen("elapsed.txt", "r");
int n = fgetc(fr);
    while(n!= EOF){
        printf("%c", n);
        n = fgetc(fr);
    }   printf("\n");
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-03 14:25:41

您不能使用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个值。您还应该考虑如果输入文件小于您的最大大小会发生什么。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-02-03 14:36:34

这里1首先打开文件2,获取文件3的大小,将大小分配给字符指针4,并从文件中读取数据

代码语言:javascript
运行
复制
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>

票数 4
EN

Stack Overflow用户

发布于 2012-02-03 13:23:39

好的,看看它的盒子大小,我可以有一个30厘米x 30厘米的盒子,可以容纳我现有的1个泡沫信。现在,我调用的函数“可以”返回一个60 am x 60 am的字母,但它99%的可能返回一个30 am x 30 am的字母,因为我知道它的读数--我知道如果我给它一个60 am x 60 am的盒子,结果总是适合的,没有任何意外。

但是,如果我确定结果始终是一个30 am x 30 am的框,那么我就知道我可以转换返回aa 60 am x 60 am框的函数的结果,而不会丢失任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9124045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档