执行两次memcpy的问题?

C++语言 码拜 9年前 (2016-02-03) 1260次浏览
#define CLIENT_ACCESS_TOKEN "2064eb7b-81a0-49d4-a819-c482223e1971"
    int size = 100000;
    char* data = new char[size];
    //cmd
    data[0] = ""A"";
    data[1] = ""A"";
    
    char token[64];
    strcpy(token, CLIENT_ACCESS_TOKEN);
    
    memcpy(data + 2*sizeof(char), &token, 64*sizeof(char));
    cout << data;
    memcpy(data + 66*sizeof(char), &token, 64*sizeof(char));
    cout << data;
    data[129] = ""D"";
    data[134] = ""\0"";

为什么只有一个2064eb7b-81a0-49d4-a819-c482223e1971, 不应该是两个吗?
应该怎么改?

解决方案:20分
按照你的代码,需要这样改:

cb = strlen(token);
memcpy(data + 2*sizeof(char) , token, cb * sizeof(char));
data[cb] = "" ""; // space
memcpy(data + (cb + 1) *sizeof(char) , token, cb * sizeof(char));
data[cb + 1 + cb] = "" "";

更清晰一点的代码可以这样写

#define CLIENT_ACCESS_TOKEN "2064eb7b-81a0-49d4-a819-c482223e1971"
    int size = 100000;
    char* data = new char[size];
 
    //cmd
    char * p = data;
    *p++ = ""A"";
    *p++ = ""A"";
    char token[64];
    size_t cb;
    strcpy(token, CLIENT_ACCESS_TOKEN);
    cb = strlen(token);
    
    memcpy(p, token, cb);
    p += cb;
    *p++ = "" ""; // space;
    memcpy(p, token, cb);
    p += cb;
    *p++ = "" ""; // space
   
    *p++ = ""D"";
    *p++ = ""\0"";
    // 输出data
    printf("%s\n", data);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明执行两次memcpy的问题?
喜欢 (0)
[1034331897@qq.com]
分享 (0)