C 如何逐个字符读取文件,然后将其存储到动态分配的数组中
我在学校有一个C语言的项目,我有一个问题。我已经阅读了几乎所有关于这个问题的主题,但是没有一个回答我的问题,这就是为什么我请求你的帮助。。。 我创建了一个结构,其中有一个指向字符数组的指针,我有一个带有int和char的文件 我想创建一个函数read_file,它将逐个字符读取这个文件,然后将它们存储到动态分配的数组中。但首先我不知道如何逐字符读取文件,其次我不知道如何将这些字符放入数组中 以下是我到目前为止所写的内容:C 如何逐个字符读取文件,然后将其存储到动态分配的数组中,c,arrays,file,C,Arrays,File,我在学校有一个C语言的项目,我有一个问题。我已经阅读了几乎所有关于这个问题的主题,但是没有一个回答我的问题,这就是为什么我请求你的帮助。。。 我创建了一个结构,其中有一个指向字符数组的指针,我有一个带有int和char的文件 我想创建一个函数read_file,它将逐个字符读取这个文件,然后将它们存储到动态分配的数组中。但首先我不知道如何逐字符读取文件,其次我不知道如何将这些字符放入数组中 以下是我到目前为止所写的内容: char* main(int argc, char *argv[]){
char* main(int argc, char *argv[]){
FILE *p_file;
char* code = malloc(1000*sizeof(char));
char* p = code;
p_file = fopen(argv[1],"rb+");
while((ch=getc(p_file)) != EOF){
*p++ = (char)fgetc(p_file);
}
return code;
free(code);
你能给我点灯吗?或者给我发一个能帮上忙的链接
提前谢谢 查看有关阅读的fread()和/或fgetc()文档。 关于数组,这取决于,如果它是一个char数组(例如char arr[100]),那么你可以在继续读取它们时将它们放在那里。希望这有帮助 测试了下面的代码 包括标题:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
选中此项:希望这有帮助。请发布您尝试过的代码。我建议您在有时间时发布您所做的,并可以上载代码。如果您无法从虚拟机复制/粘贴代码,则您可能可以使用共享文件夹、U盘、云存储提供商或电子邮件程序来交换源文件。交换数据有很多可能性。(你打算如何将源代码发送给老师?)我成功了!我的密码挂了!首先要注意的是
main
的定义必须是intmain(intargc,char*argv[])
,因此它也必须返回int
,而不是char*
。由于main
已返回(尽管系统将free
it),内存将不会free
d。此外,定义intch代码>丢失,您从文件中读取了两次,而不是分配*p++=ch代码>谢谢它似乎工作得很好!!尽管如此,我还是有几个问题!fseek做什么?我以前从未用过。。。还有getc前面的(字符)是什么?@RaphaelJaafarifseek
改变文件指针的位置,当我们通过getc读取时,我们移动内部文件指针,fseek(fh,0,SEEK\u SET)代码>只需将此移到开头,更多信息请参见-getc
返回int和char代码,因此我将变量类型更改为char。它应该自动工作,但在C语言中,清晰度很重要。
char* readFile(const char const* filename)
{
FILE* fh = fopen(filename, "r");
char* result = NULL;
if (fh != NULL) {
size_t size = 1;
while (getc(fh) != EOF) {
size++;
}
result = (char*) malloc(sizeof(char) * size);
fseek(fh, 0, SEEK_SET); //Reset file pointer to begin
for (size_t i = 0; i < size - 1; i++) {
result[i] = (char) getc(fh);
}
result[size - 1] = '\0';
fclose(fh);
}
return result;
}
char* result = readFile("test.txt");
if (result != NULL) {
printf("%s\n", result);
free(result);
}