char *变量中的垃圾值

时间:2012-07-25 13:30:14

标签: c

代码:

char* data = NULL;
data = new char[lengthOfParam];   //lengthOfParam = 3
                               //after allocation **data = ¥¥¥¥Ü\r**
memcpy(data,&buffer[offset],lengthOfParam);   //**data = pki¥Ü\r**

为什么我得到那个垃圾值???如果我尝试将该值分配给任何其他数组,如何避免或删除这些额外的值bcs 例如:

obj[1] = data;

然后将整个值与垃圾分配给该变量。

2 个答案:

答案 0 :(得分:2)

C中的字符串需要NUL终止。这意味着您需要在字符串的末尾添加一个零值字节以指示字符串的结尾。因为当您查看/打印在数组末尾读取的值时,您没有任何关于字符串结尾的指示,无论其后的内存是什么。

如果源数据包含NUL终结符,您可以简单地分配和复制1个字节,但假设它是一个没有NUL终止的固定长度字段,您需要手动添加一个:

data = new char[lengthOfParam+1];

memcpy(data, &buffer[offset], lengthOfParam);
data[lengthOfParam] = 0;

还要进一步了解您发布的这一行:

obj[1] = data;

我可能在这里错了,对不起,如果我,但我强烈怀疑这条线没有做你认为的那样。这将在obj[1]中存储指向字符串的指针,而不是复制字符串中的数据。因此,如果您删除dataobj[1]将不再有效。

答案 1 :(得分:1)

这是C还是C ++?

在包含new的语言中,您也可以

std::string data(&buffer[offset], lengthOfParam);

假设buffer是一个char数组。