コンソールから文字列を読み取ろうとしています。しかし、私はそれを一文字ずつ読みたいです。そして、文字を文字列に連結し、ループを壊すことに問題があります。コードは次のとおりです。
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]);
そして素晴らしくうまくいきました。