5

コンソールから文字列を読み取ろうとしています。しかし、私はそれを一文字ずつ読みたいです。そして、文字を文字列に連結し、ループを壊すことに問題があります。コードは次のとおりです。

char* createString(){
    char c;
    char *string;
    int x=0;

    string = (char*) calloc(1, sizeof(char));
    do{
        c = getche();
        if(c != '\n'){
            x++;
            realloc(string, sizeof(char)*x);
            strcat(string, &c);
        };
    }while(c != '\n');
    return string;
};

このコードを実行すると、連結ごとに 1 文字ではなく 3 文字が追加されます。割り当てられていないメモリにアクセスしているようなものです... (たとえば、 を押すaと、最終的な文字列は になりa%Tます。次に、別のキーを押すとs、例、紐となりますa%Ts%T

そして、 を押すEnterと、ifに入り、ループから抜け出しません。

何が原因で、何が起こっているのかわかりません...


編集


これまでの他の試行と応答に基づいて、コードを変更したところ、次のようになりました。

char* digitarString(){
    char c[2];
    char *string;

    string = (char*) calloc(1, sizeof(char));
    do{
        c[0] = getche();
        c[1] = '\0';
        if(c[0] != '\n'){
            strcat(string, c);
        };
    }while(c[0] != '\n');
    return string;
};

しかし、まだ2つの問題があります...

  • コードは機能しますが、割り当てられていないメモリに書き込んでいると思います。
  • 押しEnterても動かない。ループとifに入り続けます。

忘れてくださいEnter...私はそれを変更しました...

c[0] = getche();

scanf("%c", &c[0]);

そして素晴らしくうまくいきました。

4

3 に答える 3