2017-12-19 9 views
-4

を働いていないが、私は 私はこのコードを書かれているし、私はできるだけ多くのユーザーが望む長さの文字列を入力として受け取り、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

+0

なぜこれをNULL終端の文字列バッファに入れずに 'printf'に直接送りますか? 'free(a)'は分かりますが、 'a'を' NULL 'に設定するのは無意味です。 – tadman

+0

通常は、楽観的に大きなバッファを割り当てることでこの問題に取り組み、ユーザーがそのサイズを超えた場合は、サイズの2倍で再割り当てします。これにより、無残な再割り当てが回避されます。 – tadman

+0

ようこそスタックオーバーフロー! [Cでのmalloc()とfamilyの戻り値をキャストしない理由についてのこのディスカッションを参照してください。](https://stackoverflow.com/q/605845/2173917) –

答えて

1

あなたはcallocaを割り当てたので、あなたがループに入っていないが、そうa[0]は、それはあなたのforループの両方の初期a[i]!=0テストに失敗します0です。

+0

でも、malloc()は小さな文字列の問題 –

+0

を解決していませんが、正しく動作していますが、長さが増えるにつれて動作が停止します。 –

+0

これは別の問題です。なぜあなたはループに入っていないのか説明しました。より多くの助けが必要な場合は、質問を編集して更新してください。 –

関連する問題

 関連する問題