char*变量中的垃圾值

char*变量中的垃圾值,c,C,代码: 为什么我会得到垃圾价值观???如果我尝试将这些值分配给任何其他数组,如何避免或删除这些额外值bcs 例: 然后将带有junk的整个值分配给该变量。C中的字符串需要以NUL结尾。这意味着您需要在字符串末尾添加一个零值字节,以指示字符串的结尾。因为当您查看/打印从数组末尾读入的值时,没有字符串结尾的指示 如果源数据包含NUL终止符,您可以简单地再分配和复制1个字节,但假设它是一个没有NUL终止的固定长度字段,则需要手动添加一个: obj[1] = data; 请进一步查看您发布的这一行:

代码:

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


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

C中的字符串需要以NUL结尾。这意味着您需要在字符串末尾添加一个零值字节,以指示字符串的结尾。因为当您查看/打印从数组末尾读入的值时,没有字符串结尾的指示

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

obj[1] = data;
请进一步查看您发布的这一行:

data = new char[lengthOfParam+1];

memcpy(data, &buffer[offset], lengthOfParam);
data[lengthOfParam] = 0;
我可能错了,如果我错了,我很抱歉,但我强烈怀疑这条线没有做你认为它是。这将在obj[1]中存储指向字符串的指针,而不是从字符串中复制数据。因此,如果删除数据,Obj[1 ]也将不再有效。

< P>这是C还是C++?< /P> 在包含new的语言中,您还可以

obj[1] = data;

假设缓冲区是一个字符数组。

什么是缓冲区?什么是LangthOfPARAM?C.buffer中没有新的操作符是LVParamschar *缓冲区,int偏移量,符号char *码字,TrimthOfPARAM是int型的。@ POPYP,你能不能澄清你认为你的代码是C还是C++的语言?最好通过编辑tag.buffer是char*buffer类型。你可能是对的,但是当我从这个方法返回obj时,比如char**LVParamschar*buffer,int offset,signed char*codeWord函数调用:char**sss=lvparamsar1,0,code\u word\u arr;这里,当我这样检查时,我得到了正确的值char s1=sss[0];字符s2=sss[1];我尝试了你建议的正确方法,在分配了terminator后得到了精确的值。谢谢你,查尔斯·基帕克斯。
obj[1] = data;
std::string data(&buffer[offset], lengthOfParam);