我正在尝试分配长度未知的字符串。我已经制作了此程序,但是可以正常运行,但是当我尝试使用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);
但是当出现换行符时,这会停止,这是我的任务中的问题。 有什么建议吗?
答案 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) ;