【发布时间】:2019-01-25 01:40:25
【问题描述】:
假设您有一个char 缓冲区,您想将std::string 复制到其中。即使缓冲区有足够的大小,将额外数据复制到字符串范围之外的缓冲区是否会产生后果?
例子
std::string my_string = "hello";
char my_buffer[128];
memset(my_buffer, 0, 128);
strncpy(my_buffer, my_string.c_str(), 128);
所以“hello”会被复制到my_buffer,但my_string 之后的其他 123 个字节数据也会如此。这有什么后果吗?缓冲区保存其他数据是否有害?
【问题讨论】:
-
strncpy 将字符串作为参数?
-
那不会编译...
-
即使缓冲区有足够的大小,将太多数据复制到缓冲区中是否会产生后果? -- 什么?是不是太多了?
-
你应该阅读the documentation。密切注意小字,然后假装
strncpy()不存在。 -
@Shawn,从您的链接中,它指出,“如果从 src 复制终止的空字符后,未达到计数,则将额外的空字符写入 dest,直到计数总数字符已被写入。” --> 这意味着
my_buffer将被写入my_string,而my_buffer之后的所有内容都将用NULL 填充。我理解对了吗?
标签: c++