2014-04-24 36 views
0

我想在一個文件的所有內容去,並把它放在一個「大串」 .. 我不想通過線放線。有沒有什麼功能可以做到這一點?文件內容,以大串

我想是這樣的:

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); 
} 

那是更多鈔票?

回答

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'; 
} 

一些額外的錯誤檢查

+0

THX。我應該做什麼錯誤檢查? – ank3r

+0

當然......如果你是男人,你會發現它在成功時返回0,否則返回-1,所以像rc = fseek(...)if(rc){//處理錯誤}。另外,fread()應該返回大小字節,所以n = fread(...); if(n!= size){//處理錯誤} ...最後,在你的例子中你有一個免費的(codigo)...應該可以是if(code)free(code)...實質上,所有的函數都有一個返回碼或者一些你應該總是檢查的函數。 – maha

1

是的。請閱讀ftellstat以獲取文件的大小以找出需要分配多少空間(您不能在FILE *上使用sizeof來獲取該信息,它不會執行您的想法),和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; 
}