请告诉我以下输入流程有什么问题?
输入应该是字符串长度,然后是字符串本身。
类似" 5 vlady"
它工作正常,但valgrind(内存泄漏工具)告诉以下异常:
地址0x51ef184是一个大小为4的块后的0字节' d
她的代码:
unsigned int n;
char* string;
printf("Enter your string:\n");
scanf("%d", &n);
string = (char*)calloc((n),sizeof(char));
scanf("%s", string);
谢谢!
答案 0 :(得分:4)
发布的代码在分配的内存之外写入一个字节,因为scanf("%s")
附加一个终止空字符。格式说明符s
的说明来自C99标准的 7.19.6.2 fscanf函数部分:
如果不存在l长度修饰符,则相应的参数应该是指向字符数组的初始元素的指针,该元素大小足以接受序列和终止空字符,这将自动添加 。
因此分配n + 1
个字节。
其他: