Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何逐个字符读取文件,然后将其存储到动态分配的数组中_C_Arrays_File - Fatal编程技术网

C 如何逐个字符读取文件,然后将其存储到动态分配的数组中

C 如何逐个字符读取文件,然后将其存储到动态分配的数组中,c,arrays,file,C,Arrays,File,我在学校有一个C语言的项目,我有一个问题。我已经阅读了几乎所有关于这个问题的主题,但是没有一个回答我的问题,这就是为什么我请求你的帮助。。。 我创建了一个结构,其中有一个指向字符数组的指针,我有一个带有int和char的文件 我想创建一个函数read_file,它将逐个字符读取这个文件,然后将它们存储到动态分配的数组中。但首先我不知道如何逐字符读取文件,其次我不知道如何将这些字符放入数组中 以下是我到目前为止所写的内容: char* main(int argc, char *argv[]){

我在学校有一个C语言的项目,我有一个问题。我已经阅读了几乎所有关于这个问题的主题,但是没有一个回答我的问题,这就是为什么我请求你的帮助。。。 我创建了一个结构,其中有一个指向字符数组的指针,我有一个带有int和char的文件

我想创建一个函数read_file,它将逐个字符读取这个文件,然后将它们存储到动态分配的数组中。但首先我不知道如何逐字符读取文件,其次我不知道如何将这些字符放入数组中

以下是我到目前为止所写的内容:

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前面的(字符)是什么?@RaphaelJaafari
fseek
改变文件指针的位置,当我们通过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);
}