use*_*184 0 c c-strings char memcpy
char buffer[2000];
char boundary[]= "--this-is-a-boundary\n";
char header1_a[]= "Content-Disposition: form-data; name=\"metadata\"\n";
char header1_b[]= "Content-Type: application/json; charset=UTF-8\n\n";
printf("%s%s%s\n\n\n\n", boundary, header1_a, header1_b);
std::memcpy(buffer, boundary, sizeof boundary);
std::memcpy(buffer + sizeof boundary, header1_a, sizeof header1_a);
std::memcpy(buffer + sizeof boundary + sizeof header1_a, header1_b, sizeof header1_b);
std::memcpy(buffer + sizeof boundary + sizeof header1_a + sizeof header1_b,
strJSONout, sizeof strJSONout);
printf("%s", buffer);
Run Code Online (Sandbox Code Playgroud)
但输出是:
--this-is-a-boundary
Run Code Online (Sandbox Code Playgroud)
字符串的其余部分会发生什么?我希望buffer包含所有这些字符数组......
是因为我复制了以NULL结尾的char数组吗?
当你复制第一个字符串时,你会得到类似的东西
--This-is-a的边界\n\0
然后复制下一个字符串.你得到
- 这是一个边界\n\0Content-Disposition:form-data; 命名=\"元数据\" \n\0
由于字符串是\ 0终止的,因此字符串仍然是第一个\ 0的部分.
我想,很清楚,你要做什么...:
std::memcpy(buffer + sizeof boundary - 1, header1_a, sizeof header1_a);
Run Code Online (Sandbox Code Playgroud)
当你追加下一个字符串时,这会覆盖\ 0.