我写了一个代码来读取文件.读取默认文件或其他文件,并将内容文件存储在字符串中.我不知道我哪里做错了!当我运行它时,有时它是好的,但有时我得到一个核心转储错误!

这是我的代码:

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>

#define BUFFER_SIZE 1024
#define EXAMPLE_FILE "programing_languages.example"
#define EXAMPLE_FILE_SIZE strlen(EXAMPLE_FILE)+1


int read_file(char *buffer, char *file_name)
{
    FILE *file;

    file = fopen(file_name, "r");

    if (file == NULL)
    {
        printf("Warning!!!");
        return 1;
    }

    fread(buffer, sizeof(char), BUFFER_SIZE, file);

    fclose(file);

    return 0;
}


int main(int argc, char *argv[])
{   
    int opt;
    int file_name_customized = 0;
    char *file_name;

    while ((opt = getopt(argc, argv, "f:")) != -1) {
        switch (opt) {
            case 'f':
                snprintf(file_name, strlen(argv[2])+1, "%s", argv[2]);
                file_name_customized = 1;
                break;
            default:
                snprintf(file_name, EXAMPLE_FILE_SIZE, EXAMPLE_FILE);
        }
    }

    if (!file_name_customized)
    {
        snprintf(file_name, EXAMPLE_FILE_SIZE, EXAMPLE_FILE);
    }

    char buffer[BUFFER_SIZE] = {"\0"};

    if (read_file(buffer, EXAMPLE_FILE) == 1)
    {
        printf("Got Error To Open %s File!\n", file_name);
        return errno;
    }

    printf("%s\n", buffer);

}

我想读取一个文件并将其保存为字符串.(C语言)

推荐答案

如何读取文件并将内容保存在字符串中?

  1. 打开文件.判断是否有错误.
  2. 通过fread()读取整个文件,并使用合适的缓冲区大小,比如4K,并对返回的长度求和.
  3. 继续执行步骤2,直到出现错误或没有读取任何内容.
  4. 分配总和+1.判断分配是否成功.
  5. 将包含1 fread()的整个文件重新读取到分配的缓冲区中.Nate返回的长度.
  6. 关闭该文件.
  7. null character分.
  8. 如果长度如预期,则为成功,否则为失败.
  9. 如果失败,则返回分配的指针或NULL.

C++相关问答推荐

C中出现分段错误后关闭文件

不同到达时间的轮询实现

为什么在C中二维字符数组会有这样的行为?

增加getaddrinfo返回的IP地址数量

如何在C中从函数返回指向数组的指针?

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

可以将C变量限制为特定的读/写速度吗?

非常大的数组的大小

函数内的局部字符指针

在C语言中,指针指向一个数组

如何在双向表中实现线程安全,每个条目仅使用4位,同时避免任何全局锁?

C语言中浮点数的取整方式浮点数尾数超过23位时如何取整剩余部分

Fprintf正在写入多个 struct 成员,并且数据过剩

区分MySQL C界面中的文本和BLOB字段

可以';t从A9G模块拨打电话

UpDown控制与预期相反

STM32:代码的执行似乎取决于它在闪存中的位置

快速准确计算double的小数指数

在 C 中的 scanf() 格式说明符中使用宏获取字符串长度

用于内存布局的size命令(文本、数据、bss)