我有一个问题: 我必须阅读一个文本(来自stdin),我知道文本有多少行(N),它将是这样的: 第1句(输入) 第2句(输入) 第3句(输入)\ 0 我不知道每个句子中有多少个字符(数字会有所不同)。请帮忙
答案 0 :(得分:1)
你正在阅读未知长度的行,但你知道有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&#d;空间的地址放入指针数组中:
lines[i] = buffer;
这样做的缺点是句子中浪费了很多空间。绕过它的一种方法是在读取文件中的行后分配另一个char数组:
char *sentence = calloc(strlen(buffer)+1, sizeof(char));
strcpy(sentence, buffer, strlen(buffer));
然后将句子的地址放入指针数组中:
lines[i] = sentence;
如果任何句子超过1000个字符,这一切都会崩溃。