Read file contents with unknown size

后端 未结 3 339
小鲜肉
小鲜肉 2021-01-14 11:44

I want to process the contents of a config file. The config file could be any size. I am getting a Bus Error, after the program hangs, when I run the following code:

相关标签:
3条回答
  • 2021-01-14 11:54

    You can allocate memory with malloc:

    buffer = malloc(number_of_bytes_to_allocate);
    if(buffer == NULL) {
        // error allocating memory
    }
    

    free when you're done with it!

    free(buffer);
    
    0 讨论(0)
  • 2021-01-14 12:11

    In C99, and assuming your config file should not be in the MiB or larger range, you could use a VLA:

    FILE *fp = fopen(CONFIG_FILE, "r");
    if (fp == NULL) {
        // error handling and cleanup omitted for brevity
    }
    
    struct stat st;
    fstat(fileno(fp), &st);  // Error check omitted
    char buffer[st.st_size+1];
    fread(buffer, sizeof(char), st.st_size, fp);
    buffer[st.st_size] = '\0';
    fprintf(stderr, "%s\n", *buffer);
    fclose(fp);
    
    0 讨论(0)
  • 2021-01-14 12:17

    Use malloc(3). Put:

    buffer = malloc(st.st_size);
    

    Before your call to fread(). Don't forget to free buffer when you're done with it!

    You probably don't want to use *buffer in your printf() call, either. If you're going to try to print the whole file like that, you will want to make sure to allocate an extra byte to null-terminate your string.

    0 讨论(0)
提交回复
热议问题