在C中动态分配的字符串数组

时间:2015-12-04 12:16:52

标签: c arrays string dynamic

我有一个问题:    我必须阅读一个文本(来自stdin),我知道文本有多少行(N),它将是这样的: 第1句(输入) 第2句(输入) 第3句(输入)\ 0 我不知道每个句子中有多少个字符(数字会有所不同)。请帮忙

1 个答案:

答案 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个字符,这一切都会崩溃。