Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stringstream之间为null,必须在Char缓冲区中复制_String_Null_Copy_Char_Buffer - Fatal编程技术网

Stringstream之间为null,必须在Char缓冲区中复制

Stringstream之间为null,必须在Char缓冲区中复制,string,null,copy,char,buffer,String,Null,Copy,Char,Buffer,我有一个模板字符串,内容之间有空字符。我必须将整个字符串复制到char*缓冲区中。 请帮我复印一下好吗 #define MYSTRINGSIZE 123 memcpy(dst, str.c_str(), MYSTRINGSIZE) 试试这个。str.c\u str将以空字符终止。它不会在空字符之后出现。例如,我的字符串是this\0demostr.c\u str将返回指向字符串开头的指针。memcpy将精确复制str.size字节,直到第一个'\0'字符。str.c_str读取到空字符,之后即

我有一个模板字符串,内容之间有空字符。我必须将整个字符串复制到char*缓冲区中。 请帮我复印一下好吗

#define MYSTRINGSIZE 123
memcpy(dst, str.c_str(), MYSTRINGSIZE)

试试这个。

str.c\u str将以空字符终止。它不会在空字符之后出现。例如,我的字符串是this\0demostr.c\u str将返回指向字符串开头的指针。memcpy将精确复制str.size字节,直到第一个'\0'字符。str.c_str读取到空字符,之后即使指定了nLen,也不会考虑空字符后的其余字符。所以在这种情况下memcpy失败了。在你看来,它能够阅读全部内容,我为什么要做memcpy呢?我可以直接分配给字符缓冲区。我说的对吗?str.c_str不读取任何内容,它只返回指向字符串的指针。当字符串有“\0”时,所有通过字符串strlen、strcpy等进行迭代的函数都将阻塞在该“\0”上。因此,使用std::string方法对其进行操作是危险的。memcpy不看你在复制什么,它只会复制所需的字节。对我来说,在以NUL结尾的C字符串中使用该符号并不公平。问题是:如果我是你,我会以某种方式存储字符串长度,并在执行memcpy时指定该大小。