我想声明一个包含4个字符的字符串
char st[4];
memcpy(st,"test",4);
Run Code Online (Sandbox Code Playgroud)
但是当我打印出来的时候...我已经"测试"并在其后打印了一些其他符号 - 这有什么问题?
非常感谢
Mat*_*hen 11
C字符串,如"test"字符串文字,是NUL终止的,这意味着最后一个字符是'\ 0':
{'t', 'e', 's', 't', '\0'}
Run Code Online (Sandbox Code Playgroud)
您需要使用st[5]并复制5个字符才能获得(包括)NUL的空间.原样,你没有把它包含在副本中.如此后来,st看起来像:
{'t', 'e', 's', 't', X, X, X ... '\0'}
Run Code Online (Sandbox Code Playgroud)
当你打印时,C会不断读取内存中的乱码值(上面的X')直到找到NUL.
最好的解决方案是消除memcpy,让编译器从初始化中找出大小:
char st[] = "test";
Run Code Online (Sandbox Code Playgroud)
sizeof(st) 现在将是5.