c - realloc 是否在重新分配的字符串中包含 \0?
问题描述
我需要重新分配通过 获取的字符串scanf("%ms", ...)
,是否会realloc
自动在重新分配的字符串中包含终止字符\0
?realloc
在这种情况下的行为是什么?
\0
它会在重新分配的字符串的末尾添加,还是将它留\0
在前一个字符串的相同位置,在之后添加未初始化的内存\0
?
例如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *string = NULL;
char *p = NULL;
int length = 0;
//This should automatically add \0 at the end, if i'm not wrong
scanf("%ms", &string);
length = strlen(string);
p = realloc(string, sizeof(char) * (length + 10));
if (p != NULL) {
string = p;
p = NULL;
}
free(string);
return 0
}
PS:我strlen()
在这里使用过字符串:strlen with scanf("%ms"...)
解决方案
realloc
不知道/不关心空字节或给定对象中存储的任何其他内容。它只是保证旧内容被保留/复制到它返回的新对象中(假设realloc
调用成功)。只要您之前添加了它,它也会在那里realloc
。在你的情况下,空字节在那里(假设scanf
成功),所以它也会在那里realloc
。
但是,请注意,如果您使用缩小对象realloc
,则只会保留指定大小的内容 - 在这种情况下,您可能没有 . 之后的空字节realloc
。
推荐阅读
- python - 编写多个 try 子句以将 json 字符串对象转换为数据类的更好方法是什么?
- python - 多维切片数组 Python
- amazon-s3 - 0/3 个节点可用:1 个节点具有 pod 无法容忍的污点,2 个 cpu 不足。MR3 蜂巢
- r - R 编程中的 mclapply - 如何确保使用所有内核和内存
- android - 添加Yandex地图(mapkit)时项目未建
- react-redux - Array.indexOf 不是函数
- alexa - 使用内置键盘的 Alexa APL 输入
- python - 鉴于您在结构化数组的一维切片中添加了一个新字段,为什么不能将新字段的条目设置为列表?
- postgresql - 在 Postgres 中使用 DEFAULT 关键字
- excel - 设置一个独立于执行模块的常量