我正在写一个通过的程序,我有一点问题。 我想动态分配内存位置与从文件中提取的句子大小。此指针也应在内容
中包含此文本当文件有句子时:
"一二三四五"
然后我希望char*
示例为25个字符分配内存位置。
当我想在控制台上打印这个文本时,我想通过
printf("%c", example);
控制台应如下所示:
一二三四五
我这样做:
char* czyt = (char*)malloc(sizeof(fgets( line/*static variable*/,
500 /*MAX LINE LENGHT*/,
wejscie /*FILE*/ )));
但在这种情况下,czyt
没有这句话,我需要使用静态变量。
答案 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行的指针地址),然后通过操作进行排序指针