如何在c中通过malloc返回null后重新分配动态数组?

时间:2016-12-04 15:38:00

标签: malloc realloc

我想编写一个应该以字符串形式接收输入的程序, 并且此输入将保存在动态数组中,因此我使用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;
}

1 个答案:

答案 0 :(得分:0)

最简单的方法是在scanf中使用m修饰符:

char *user = 0;
scanf("%ms", &user);
// use 'user' -- will be null if there was an error reading.

不幸的是,这仅适用于POSIX系统。在其他系统上,您需要使用getchar编写自己的循环读取字符,并在阅读时重新分配(根据需要)。