由strncpy()复制时预定义的字符串段错误

las*_*ash 0 c malloc segmentation-fault strncpy

为什么......

char *dst = (char*) malloc(sizeof(char) * 11);
char *src = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
strncpy(dst, src, 10);
Run Code Online (Sandbox Code Playgroud)

......工作正常,但......

char *dst = "ABCDEFGHIJ\0";
char *src = "ABCDEFGHIJKLMNOPQRSTUVQXYZ\0";
strncpy(dst, src, 10);
Run Code Online (Sandbox Code Playgroud)

... 甚至 ...

char *dst = "ABCDEFGHIJ\0";
char *src = "KLMNOPQRST\0";
strncpy(dst, src, 10);
Run Code Online (Sandbox Code Playgroud)

给段

另外,这是怎么回事:

char *dst = (char*) malloc(sizeof(char) * 10); // also works with 9
char *src = "ABCDEFGHIJKLMNOPQRSTUVQXYZ\0";
strncpy(dst, src, 10);
Run Code Online (Sandbox Code Playgroud)

将11个字节复制到分配有10个字节的指针中原则上应该失败?

Som*_*ude 6

字符串文字可以存储在只读存储器段中.你不应该修改它们.

此外,没有检查超出界限的写作.您听到的许多安全问题源于这样一个事实:有很多代码没有任何边界检查.

写入超出已分配内存的范围,以及尝试修改字符串文字或其他只读/常量数据,会导致未定义的行为.