-3

代码:

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

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

obj[1] = data;

然后将带有 junk' 的整个值分配给该变量。

4

2 回答 2

2

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]也将不再有效。

于 2012-07-25T13:35:41.993 回答
1

这是 C 还是 C++?

在包含 的语言中new,您还可以执行

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

假设buffer是一个字符数组。

于 2012-07-25T13:59:39.290 回答