【发布时间】:2015-12-04 12:16:51
【问题描述】:
我有一个问题: 我必须阅读文本(来自标准输入)并且我知道文本有多少行(N),它将是这样的: 句子1(输入) 句子2(输入) 句子3(输入)\0 我不知道每个句子中有多少个字符(数字会有所不同)。请帮忙
【问题讨论】:
我有一个问题: 我必须阅读文本(来自标准输入)并且我知道文本有多少行(N),它将是这样的: 句子1(输入) 句子2(输入) 句子3(输入)\0 我不知道每个句子中有多少个字符(数字会有所不同)。请帮忙
【问题讨论】:
您正在阅读长度未知的行,但您知道有 N 行。
char *lines[N]; // the array of pointers to your lines
int i = 0;
如果你知道最长的句子可能有多长,你可以声明一个大的字符数组来阅读每一行:
char *buffer;
buffer = calloc(1000, sizeof(char)); // An arbitrary size. I made it up.
然后使用 fgets() 从文件读取到缓冲区。 fgets() 将读取下一个换行符或 EOF,以先到者为准。
然后将你的 malloc 空间的地址放入你的指针数组中:
lines[i] = buffer;
这样做的缺点是句子中浪费了大量空间。一种解决方法是在从文件中读取该行之后分配另一个字符数组:
char *sentence = calloc(strlen(buffer)+1, sizeof(char));
strcpy(sentence, buffer, strlen(buffer));
然后将句子的地址放入你的指针数组中:
lines[i] = sentence;
如果任何句子的长度超过 1000 个字符,这一切都会崩溃。
【讨论】: