我正在尝试从控制台读取字符串。但我想逐个字符地阅读它。而且我在将字符连接到字符串和打破循环时遇到了麻烦。这是代码:
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;
};
当我运行此代码时,每个连接添加 3 个字符,而不仅仅是 1。这就像访问未分配的内存......(例如,如果我按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;
};
但是,还有两个问题...
- 该代码有效,但我认为它是在未分配的内存中编写的。
- 当我按下
Enter
它仍然不起作用。它不断进入循环和if。
忘了Enter
...我改变了它...
c[0] = getche();
至
scanf("%c", &c[0]);
并且工作得非常好。