动态分配未知长度的字符串

时间:2019-11-21 18:31:07

标签: c

我正在尝试分配长度未知的字符串。我已经制作了此程序,但是可以正常运行,但是当我尝试使用valgrind时,它始终显示1错误,“有条件的跳转或移动取决于未初始化的值” 该程序看起来像这样

char *text = NULL;
int i = 0, error = 0;
text = (*char) malloc(sizeof(char));
while(1){
   error = scanf("%c", &text[i]);
   if(error == EOF)
      break;
   i++;
   text = (*char) realloc(text, sizeof(char) * (i + 1));
}
printf("%s", text);
free(text);

我尝试使用

scanf("%ms", &text);

但是当出现换行符时,这会停止,这是我的任务中的问题。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

将显式循环写入getchar / realloc的替代方法:

scanf将读取直到空白。很少有使用标准库调用执行多行读取的方法。更少的行数/更少的错误。

使用getdelim,且delim为0。只要输入不包含NUL字符就可以使用。

    char *cp = NULL ;
    size_t n = 0 ;
    getdelim(&cp, &n, 0, stdin) ;
    printf("S=%s\n", cp) ;

如果getdelim不可用,则可以使用有效接受所有字符的字符序列。使用将拒绝输入中不会显示的字符的字符序列(例如Ctrl / A,'\ 001')。

    char *cp = NULL ;
    fscanf("%m[^\1]", &cp) ;
    printf("S=%s\n", cp) ;
相关问题