我在写一个程序,我必须把两个重叠的字符串复制到另一个.环顾四周,memmove
个似乎是我完成这项任务所需的.然而,从阅读手册页来看,它似乎并不像我所认为的那样工作.
我已经为测试编写了以下代码:
#include <stdio.h>
#include <string.h>
int main () {
char* s = "foobar"; // 7 bytes
memmove(s, s+1, 6);
printf("%s\n", s);
return 0;
}
我期望打印oobar
,但是,我在执行时遇到了一个分段错误.如果我为第三个参数指定小于6的值,情况也是如此.
在valgrind运行,上面写着
==36627== Bad permissions for mapped region at address 0x10A004
==36627== at 0x4852A13: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==36627== by 0x10917B: main (in /home/[..]/tmp)
这是我一生中第二次使用valgrind,所以除了memmove
是seg故障背后的原因之外,我不知道它到底说了什么.
我在这里做错了什么?