別の関数によって読み取られた文字列を含む配列、たとえばテキストがあります。弦の長さは不明で、その量も不明です。文字列の配列にメモリを割り当てるにはどうすればよいですか (別の配列として既に存在する文字列自体には割り当てません)。
私が今セットアップしたものは、文字列を問題なく読み取っているようで、正しく実行したい後処理を行っているようです (静的配列でこれを試しました)。ただし、テキストの要素を印刷しようとすると、セグメンテーション違反が発生します。より正確には、text[3] や text[5] などの特定のテキスト要素を出力しようとすると、セグメンテーション違反が発生します。これは、メモリをテキストに正しく割り当てておらず、読み取ったすべての文字列がテキストに正しく保存されていないことを意味していると思いますか?
size_t=k , k*sizeof(char)
これまでのところ、最初にいくつかのセット量を割り当ててから、より多くのメモリを再割り当てするなど、さまざまなアプローチを試してきました( realloc k*sizeof(char)) if cnt == (k-2)
cnt は **text.
これを検索しようとしましたが、私が見つけた唯一の同様の問題は、長さが不明な一連の文字列に関するものでした。
自分でできる限り理解したいので、実際のコードは投稿しませんでした。ただし、これが意味をなさない場合は、投稿します。
編集:これがコードです
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;
}