我对基本的C编程有一些疑问。
我有一个char数组,我必须将它复制到char指针。因此,我做了以下工作:
char a[] = {0x3f, 0x4d};
char *p = a;     
printf("a = %s\n",a);
printf("p = %s\n",p);
unsigned char str[] = {0x3b, 0x4b};
unsigned char *pstr =str;
memcpy(pstr, str, sizeof str);
printf("str = %s\n",str);
printf("pstr = %s\n",pstr);我的pstr和str的printf语句被附加了数据"a“。如果我删除memcpy,我会得到垃圾。一些C大师能给我一些启发吗?
发布于 2018-02-28 07:20:30
同意。您必须在字符数组的末尾添加一个空字节。
char a[] = {0x3f, 0x4d, '\0'};原因是您正在创建一个字符串,而没有声明它的实际结束位置。您的memcpy()函数将*str复制到*pstr,并自动为您添加一个空字节,这就是它工作的原因。
如果没有memcpy(),字符串永远不知道何时结束,所以它会到达后续的内存地址,并返回存储在那里的任何随机值。当你用字符创建一个字符串时,一定要记住以空字节结尾。
https://stackoverflow.com/questions/5632773
复制相似问题