【问题标题】:How can I return file contents from a function?如何从函数返回文件内容?
【发布时间】:2011-11-25 17:16:16
【问题描述】:

我正在编写一个 C 库。我想将此函数中的文件内容返回给调用者。

如何将文件内容转换为 char[]?

fopen 崩溃了,因为我在 C 代码中使用了 perl.h。 除了打开和读取文件之外,还有其他方法可以将文件转换为字符数组吗?

这是我的代码:

FILE* fp = fopen("console.txt", "r");
char message[1024];
strcpy(message,"\n");

char buf[80];
while(!feof(fp))
{
    fgets(buf, sizeof(buf)-1, fp);
    strcat(message, buf);
}

【问题讨论】:

标签: c


【解决方案1】:
  1. 获取文件大小(见How can I get a file's size in C?
  2. 分配内存来存储文件的内容(参见malloc)。
  3. 将文件内容读入分配的内存中(参见read)。
  4. 向用户返回一个指针和数据长度(以字节为单位)。

不要忘记检查这些步骤之间的错误。

【讨论】:

    【解决方案2】:

    你需要做一些事情

    • 确定文件大小(检查 fstat/stat)
    • 您需要分配足够的内存来保存文件
    • 然后您可以使用 fread 将文件的内容读取到您的数组中(不要忘记以二进制模式打开文件)
    • 返回指针(不要忘记它必须由函数调用者释放)

    【讨论】:

    • 如果其中有空字符,需要返回长度 - 否则strlen 将不起作用!
    【解决方案3】:

    试试这个代码。该函数返回带有文件内容的字符串,直接打印即可。

        #include <stdio.h>
        #include <stdlib.h>
    
        char *readFile(char *filename)
        {
            char * buffer = 0;
            long length;
            FILE * f = fopen (filename, "r");
            if (f)
            {
                fseek (f, 0, SEEK_END);
                length = ftell (f);
                fseek (f, 0, SEEK_SET);
                buffer = malloc (length);
                if (buffer)
                {
                    fread (buffer, 1, length, f);
                }
                fclose (f);
            }
            return buffer;
        }
    
        int main()
        {
           char *content=readFile("D://test1.xml");
           printf("%s",content);
           return 0;
        }
    

    【讨论】:

      【解决方案4】:

      由于需要文件的内容和性质,因此需要更多信息才能给出好的答案。

      但一般来说,

      如果是文本文件,请参阅stdio 库 - 您可以获取长度、创建数组并填充它。否则(二进制文件)解析它会是一个好主意并返回一个数据结构 - 更有用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 2017-12-14
        • 2015-06-02
        • 1970-01-01
        相关资源
        最近更新 更多