我有一个数组,比如文本,其中包含另一个函数读入的字符串。字符串的长度是未知的,它们的数量也是未知的。我应该如何尝试将内存分配给字符串数组(而不是字符串本身,它们已经作为单独的数组存在)?
我现在设置的内容似乎可以很好地读取字符串,并且似乎可以正确完成我想要完成的后处理(我用静态数组尝试过)。但是,当我尝试打印文本元素时,出现分段错误。更准确地说,当我尝试打印文本的特定元素(例如 text[3] 或 text[5])时,会出现分段错误。我认为这意味着我错误地将内存分配给文本,并且读取的所有字符串都没有正确保存到文本中?
到目前为止,我已经尝试了不同的方法,例如首先分配一定数量的一些size_t=k , k*sizeof(char)
,然后重新分配更多的内存(使用realloc k*sizeof(char)) if cnt == (k-2)
,其中 cnt 是 **text.txt 的索引。
我试图搜索这个,但我发现的唯一类似问题是一组长度未知的字符串。
我想尽可能多地自己弄清楚,因此没有发布实际代码。但是,如果这些都没有任何意义,我会发布它。
编辑:这是代码
int main(void){
char **text;
size_t k=100;
size_t cnt=1;
int ch;
size_t lng;
text=malloc(k*sizeof(char));
printf("Input:\n");
while(1) {
ch = getchar();
if (ch == EOF) {
text[cnt++]='\0';
break;
}
if (cnt == k - 2) {
k *= 2;
text = realloc(text, (k * sizeof(char))); /* I guess at least this is incorrect?*/
}
text[cnt]=readInput(ch); /* read(ch) just reads the line*/
lng=strlen(text[cnt]);
printf("%d,%d\n",lng,cnt);
cnt++;
}
text=realloc(text,cnt*sizeof(char));
print(text); /*prints all the lines*/
return 0;
}