2014-08-28 40 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