我想编写一个应该以字符串形式接收输入的程序, 并且此输入将保存在动态数组中,因此我使用malloc,例如20 * sizeof,我想如果字符串的大小比我的分配内存长,请改进它的大小。但是我收到了崩溃,并且无法使用realloc来改善它的大小。
我该怎么办?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *user;
int n = 0;
user = (char*)malloc(20*sizeof(char));
scanf("%s",user);
n = strlen(user);
user = (char*)realloc(user,n);
return 0;
}
答案 0 :(得分:0)
最简单的方法是在scanf中使用m
修饰符:
char *user = 0;
scanf("%ms", &user);
// use 'user' -- will be null if there was an error reading.
不幸的是,这仅适用于POSIX系统。在其他系统上,您需要使用getchar
编写自己的循环读取字符,并在阅读时重新分配(根据需要)。