从文件复制到指针

时间:2015-04-15 11:14:26

标签: c file fgets

我正在写一个通过的程序,我有一点问题。 我想动态分配内存位置与从文件中提取的句子大小。此指针也应在内容

中包含此文本

当文件有句子时:

  

"一二三四五"

然后我希望char*示例为25个字符分配内存位置。 当我想在控制台上打印这个文本时,我想通过

来做
printf("%c", example);

控制台应如下所示:

  

一二三四五

我这样做:

char* czyt = (char*)malloc(sizeof(fgets( line/*static variable*/,
                                         500 /*MAX LINE LENGHT*/,
                                         wejscie /*FILE*/ )));

但在这种情况下,czyt没有这句话,我需要使用静态变量。

2 个答案:

答案 0 :(得分:0)

如果您的担忧是在没有缓冲的情况下解决这个问题:这有点不寻常。但在类似POSIX的系统上,您可以使用stat()(参见http://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html)。

效率较低的是使用Posix“lseek()open文件,使用int fileLength = lseek(fd, 0, SEEK_END);搜索结尾并分配fileLength字节。

无论您使用什么功能,它都会告诉您文件的大小而不读取任何内容,以便您可以分配一个具有所需大小的缓冲区。在您阅读文件之前,请不要忘记使用lseek(fd, 0, SEEK_SET)回放文件,或者关闭文件并使用fopen()重新打开。

答案 1 :(得分:-1)

  

对文件行进行排序的最理想方式是   使用字典树。使用单独的行创建字典树   然后执行深度优先遍历。

这是一个简单的程序,可根据行长度进行动态缓冲区分配(假设行长度不超过500)

int main(int argc, char const *argv[])
{
        char string[500];
        char *str;

        FILE *in_file = fopen("abc.txt", "r");
        if (in_file == NULL)
        {
                printf("Error file missing\n");
                exit(-1);
        }
        while ( fgets(string, 500, in_file) != NULL)
        {
                str = (char *)  malloc ( sizeof(char) * strlen(string));
                strcpy(str, string);
                printf("%s", str);
        }
        fclose(in_file);
        return 0;
}

如果你想对它们进行排序,你可以使用链表来存储这些数据,也可以使用一个指针数组(它将保存所有malloc-ed行的指针地址),然后通过操作进行排序指针