を働いていないが、私は 私はこのコードを書かれているし、私はできるだけ多くのユーザーが望む長さの文字列を入力として受け取り、it.soこれを表示するコードを書いています適切に
#include<stdio.h>
#include<stdlib.h>
void main()
{
char *a;
int i,n;
a=(char*)calloc(1,sizeof(char));
printf("enter the string\t");
for(i=0;a[i]!=0;i++)
{
scanf("%[^0]c",&a[i]);
n=2+i;
a=(char*)realloc(a,(n)*sizeof(char));
}
for(i=0;a[i]!=0;i++)
{
printf("%c",a[i]);
}
free(a);
a=NULL;
}
を書かれているが、それは何でありますループに入り込まず、入力を受け入れます。何がうまくいかないのか教えていただけますか? THANKS
なぜこれをNULL終端の文字列バッファに入れずに 'printf'に直接送りますか? 'free(a)'は分かりますが、 'a'を' NULL 'に設定するのは無意味です。 – tadman
通常は、楽観的に大きなバッファを割り当てることでこの問題に取り組み、ユーザーがそのサイズを超えた場合は、サイズの2倍で再割り当てします。これにより、無残な再割り当てが回避されます。 – tadman
ようこそスタックオーバーフロー! [Cでのmalloc()とfamilyの戻り値をキャストしない理由についてのこのディスカッションを参照してください。](https://stackoverflow.com/q/605845/2173917) –