【问题标题】:File content to big string文件内容到大字符串
【发布时间】:2014-04-24 23:33:19
【问题描述】:

我想一次性获取文件的所有内容并将其放入“大字符串”.. 我不想逐行放置。有什么功能可以做到吗?

我想要这样的东西:

int main(int argc, char *argv[]) {
    FILE *script;
        int i;
        char *code;

        if (argc > 1){
          for (i = 1; i < argc; i++){
            if ((script = fopen(argv[i], "r")) == NULL){
            perror(argv[i]);
            }else {
               code = malloc (sizeof(char)*sizeof(script));

               **HERE TAKE THE CONTENT AND PUT IN "CODE" IN ONE GO** 


             }
           }
         }
     printf("%s",code);
     fclose(script);
     free(codigo);
     exit(0);
}

这可能吗?

【问题讨论】:

    标签: c string file copy


    【解决方案1】:

    你也可以考虑使用

    fseek(script, 0, SEEK_END); // position to the end of the file
    
    size = ftell(script); // get the file size
    
    fseek(script, 0, SEEK_SET); // rewind to the beginning of the file
    
    code = malloc(sizeof(char)*(size+1));
    
    if(code) { 
        fread(code, sizeof(char), size, script);
        code[size] = '\0';
    }
    

    带有一些额外的错误检查

    【讨论】:

    • sure... 如果你 man fseek 你会看到它在成功时返回 0,否则返回 -1,所以像 rc = fseek(...) if(rc) { // 处理错误 }。此外, fread() 应该返回 size 个字节,所以 n = fread(...); if(n!=size) { // 处理错误 }... 最后,您的示例中有一个 free(codigo) ... 这可能类似于 if(code) free(code)... 本质上,所有函数都有一个返回码或一些你应该经常检查的代码。
    【解决方案2】:

    是的。阅读ftellstat 以获取文件的大小以了解您需要分配多少空间(您不能在FILE * 上使用sizeof 来获取该信息,它赢了't do you think), 并fread 一口气读完。

    使用 stat() 获取大小的示例代码:

    #include <sys/stat.h>
    
    off_t fsize(const char *fname) {
        struct stat st;
    
        if (stat(fname, &st) == 0)
            return st.st_size;
    
        return -1; 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2019-10-06
      相关资源
      最近更新 更多