Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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
从文件读取时填充malloc数组_C_File_Malloc - Fatal编程技术网

从文件读取时填充malloc数组

从文件读取时填充malloc数组,c,file,malloc,C,File,Malloc,我试图创建一个打开文件的函数,然后使用lseek计算文件中的数据量,然后使用从文件中计算和读取的数据量malloc buf数组,并填充buf数组。然后该函数返回buf数组 我遇到的问题是,由于某种原因,我的buf数组没有使用文件中的数据填充。因此printf在buff函数中打印出一个空行。有没有想过为什么会发生这种情况?它会打印一个空值,因为您正在这样做 使用lseek函数将文件ponter移动到文件末尾,并将其存储到end变量 从文件末尾移动的文件指针开始,读取文件中的buff变量 您试图读取

我试图创建一个打开文件的函数,然后使用lseek计算文件中的数据量,然后使用从文件中计算和读取的数据量malloc buf数组,并填充buf数组。然后该函数返回buf数组


我遇到的问题是,由于某种原因,我的buf数组没有使用文件中的数据填充。因此printf在buff函数中打印出一个空行。有没有想过为什么会发生这种情况?

它会打印一个空值,因为您正在这样做

  • 使用lseek函数将文件ponter移动到文件末尾,并将其存储到end变量

  • 从文件末尾移动的文件指针开始,读取文件中的buff变量

  • 您试图读取一个从末尾开始的文件,正常情况下,buff上不会返回任何内容

    试试thys:

    // Trying to store the the data from a text file into an array
      char *buff(const char *path){
        int end = 0;
        char * buf;
        int f_write = open(path,O_RDONLY);
        end = lseek(f_write,0,SEEK_END);
        buf =(char*)malloc(sizeof(char*)*(end+1));
        read(f_write,buf,end+1);
        close(f_write);
        buf[end+1]= '\0';
        printf("%s\n",buf);//Prints empty line because buf has not been populated
        return buf;
     }
    

    如果此问题已解决,请告诉我:)

    它会打印一个空值,因为您正在执行此操作

  • 使用lseek函数将文件ponter移动到文件末尾,并将其存储到end变量

  • 从文件末尾移动的文件指针开始,读取文件中的buff变量

  • 您试图读取一个从末尾开始的文件,正常情况下,buff上不会返回任何内容

    试试thys:

    // Trying to store the the data from a text file into an array
      char *buff(const char *path){
        int end = 0;
        char * buf;
        int f_write = open(path,O_RDONLY);
        end = lseek(f_write,0,SEEK_END);
        buf =(char*)malloc(sizeof(char*)*(end+1));
        read(f_write,buf,end+1);
        close(f_write);
        buf[end+1]= '\0';
        printf("%s\n",buf);//Prints empty line because buf has not been populated
        return buf;
     }
    

    让我知道这个问题是否解决:)

    首先检查您调用的每个函数,看看它是否返回错误。并使用
    fstat()
    获取文件大小。另外,您分配的内存是所需内存的4到8倍,尽管这还不够。我已经这样做了,当我打印变量“end”时,它会打印出文件大小。您知道您的文件包含什么吗?如果它以零开头,则不会打印任何内容文件不能大于buf,因为我会使用从lseekOnly read
    end
    字节而不是
    end+1
    返回的值动态分配buf数组<代码>buf[end+1]='\0'-->
    buf[end]='\0'。还有许多其他问题`首先检查您调用的每个函数,看看它是否返回了错误。并使用
    fstat()
    获取文件大小。另外,您分配的内存是所需内存的4到8倍,尽管这还不够。我已经这样做了,当我打印变量“end”时,它会打印出文件大小。您知道您的文件包含什么吗?如果它以零开头,则不会打印任何内容文件不能大于buf,因为我会使用从lseekOnly read
    end
    字节而不是
    end+1
    返回的值动态分配buf数组<代码>buf[end+1]='\0'-->
    buf[end]='\0'。还有许多其他问题`
    buf[end+1]='\0'
    在分配的内存外写入(如果分配大小正确,则不是这样)。查看
    sizeof(char*)*(end+1)
    buf[end+1]
    buf[end+1]='\0'
    在分配的内存外写入(如果分配大小正确,则不是这样)。查看
    sizeof(char*)*(end+1)
    buf[end+1]