2014-08-28 71 views
0

我在C編程方面真的很新,所以我需要讀一個大文件,將它分成每個點,然後在新文件中寫入我在分割時得到的內容,所以我有寫幾個文件,問題是當我命名新文件。 我一直在這個項目工作一週,我無法修復這個問題。 這裏的代碼我到目前爲止在C編寫,閱讀和拆分文件

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

char *myRead(char file_name[]){ 
    char *output; 
    long size; 
    FILE *myfile = fopen(file_name,"rb"); 

    fseek(myfile, 0, SEEK_END); 
    size = ftell(myfile); 
    rewind(myfile); 

    output = (char*) malloc(sizeof(char) * size); 
    fread(output,1,size,myfile); 
    fclose(myfile); 

    return output; 
} 

void myWrite(char content[], int i){ 
    FILE *myfile; 
    myfile = fopen(i,"w"); 
    fprintf(myfile,"%s",content); 
    fclose(myfile); 
} 

void split(char *content){ 
int word_length = strlen(content); 

    int i = 0; 

    char *output = strtok (content,"."); 
    while (output != NULL){ 

     myWrite(output,i); 
     printf("%s\n", output); 
     output = strtok (NULL, "."); 
     i++; 
    } 
} 

int main(){ 
    char file_name[] = "hourglass.txt"; 
    char *content = myRead(file_name); 
    split(content); 
    return 0; 
} 

我想知道那是什麼我該怎麼辦幾個文件只是一個號碼叫什麼名字? (英文它不是我的主要語言,不要粗魯請)

回答

2

變化

myfile = fopen(i,"w"); 

char file_name[100]; 
sprintf(filename, "%d", i); 
myfile = fopen(file_name, "w"); 

這應該修復它爲你

+0

如果沒有至少6個字符變化,我不能編輯,但是您的變量在第二個語句中是錯誤的。 – Luis 2014-08-28 16:52:55

+0

我很感謝你,埃德,這項工作就是我想要的:D! – cafej 2014-08-28 16:58:18

+0

請使用'snprintf'而不是'sprintf',並且後者不安全。 – Jay 2014-08-28 17:21:13

0

C'S的fopen有簽名:

FILE* fopen(const char *filename, const char *mode) 

當你撥打imyWrite你告訴它一個字符串位於那個地址,那裏可能有垃圾。如果這不是作業的解釋,我可以詳細說明,但如果是這樣,我只會指出你itoa

+1

Ed的回答比較好; 'itoa'不是標準功能! – 2014-08-28 16:51:19

+0

是的,這是作業,但我一直在努力,我只是想知道如何命名我的文件,如0.txt,1.txt 2.txt等.... – cafej 2014-08-28 16:53:15

+0

鋁是正確的,更喜歡sprintf – Luis 2014-08-28 16:58:36