2012-05-19 214 views
0
int main(int argc, char **args) { 
    unsigned char* str = "hallo"; 
    printf("String: %s\n",str); 
    uint8_t aktion, id; 
    uint32_t str_length; 
    aktion = 1; 
    id = 4; 
    str_length = strlen(str)+1; 

    unsigned char *buff;  
    buff = (unsigned char*) calloc(1,str_length+6); 
    memcpy(buff, &id, sizeof(id)); 
    memcpy(buff+sizeof(id), &str_length, sizeof(str_length)); 
    strcpy(buff+sizeof(id)+sizeof(str_length), str); 
    printf("Buffer+5: %s\n",buff+5)); 
    memcpy(buff+sizeof(id)+sizeof(str_length)+str_length, &aktion, sizeof(aktion)); 
    return 0; 
} 

爲什麼我不會輸出「hallo」?我仍然不確定使用指針算術和緩衝區。字符緩衝區中的許多緩衝區

問候

+0

考慮到您將'calloc'的結果進行投遞的方式,我認爲這是C++。你應該使用'std :: string',而不是混淆裸指針。 –

+0

你好,沒有它的c。 – user1324258

+1

然後你不應該投射'calloc'的結果。 –

回答

2
uint32_t str_length; 
aktion = 1; 
id = 4; 
str_length = strlen(str)+1; 

unsigned char *buff;  
buff = (unsigned char*) calloc(1,str_length); 

您不應該在C中使用malloc/calloc的返回指針。

buff大小爲6

memcpy(buff, &id, sizeof(uint8_t)); 

你寫1個字節這裏

memcpy(buff+1, &str_length, sizeof(uint32_t)); 

你寫了4個字節的位置:

這意味着你已經用盡了5個字節進行分配6個字節爲buff

strcpy(buff+5, &str); 

您正在寫入已分配字節的buff。這會導致內存損壞

+0

ahkeykey buffersize是錯誤的。改變了,現在它工作!謝謝 – user1324258

1

它應該是:

strcpy(buff + sizeof id + sizeof str_len, str); 
/*          ^^^^ no '&'! */ 

str已經是一個指針。相比之下,&str是指針的地址,這不是你所追求的。

您還需要在兩個初始變量的緩衝區中騰出空間。

+0

啊我只是忽略了&。謝謝!現在它工作了! – user1324258