代码:
char* data = NULL;
data = new char[lengthOfParam]; //lengthOfParam = 3
//after allocation **data = ¥¥¥¥Ü\r**
memcpy(data,&buffer[offset],lengthOfParam); //**data = pki¥Ü\r**
为什么我得到的是垃圾值???如果我尝试将该值分配给任何其他数组,如何避免或删除这些额外的值 例如:
obj[1] = data;
然后带有垃圾的整个值将被分配给该变量。
最佳答案
C 中的字符串需要以 NUL 结尾。这意味着您需要在字符串末尾添加一个零值字节来指示字符串的结尾。因为当您查看/打印正在读取的超出数组末尾的值到其后面的任何内存中时,您没有指示字符串的结尾。
如果源数据包含 NUL 终止符,您可以简单地再分配和复制 1 个字节,但假设它是一个没有 NUL 终止符的固定长度字段,您将需要手动添加一个:
data = new char[lengthOfParam+1];
memcpy(data, &buffer[offset], lengthOfParam);
data[lengthOfParam] = 0;
还进一步查看您发布的这一行:
obj[1] = data;
我可能错了,如果我错了,抱歉,但我强烈怀疑这条线没有按照你的想法去做。这将在 obj[1]
中存储指向您的字符串的指针。不要从字符串中复制数据。因此,如果您删除 data
, obj[1]
也将不再有效。
关于c - char* 变量中的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650861/