memcpy不是实际的复制

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数组吗?

Ami*_*wad 7

当你复制第一个字符串时,你会得到类似的东西

--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.