c - char* 变量中的垃圾值

标签 c

代码:

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/

相关文章:

c - 使用 C 处理发布请求数据而不消耗不必要的内存的最佳方法

检查输入是否已输入到数组中

C:没有停止和等待的套接字

python - 通过串行传输标准输出不起作用

c - 在 C 中,我如何从文件中扫描并与另一个扫描进行比较

c - 如何在我的项目中使用 Linux like CONFIG_* 配置?

c - 如何将字符串拆分为 int[3]

c - 如何用C实现静态图

c - 这段代码有什么作用?发现 &= pattern[j] == *(char*)(base + i + j)

c - "make clean"导致 "make all"失败