我有下面的代碼,其中我試圖創建一個長度爲7個字節的緩衝區,然後在網絡字節順序中將一個整數與char數組一起放入緩衝區,我不應該在我的sprintf()
緩衝區末尾有空字符,所以我使用memcpy()
來複制7個字節。但是,我似乎在memcpy()
後得到了不同的緩衝區。memmove不復制緩衝區的所有內容 - C
代碼:
int num = 1234;
char *dummy = "bla";
int dummy_len = strlen(dummy);
int buffer_len = sizeof(int) + dummy_len;
char *buffer = malloc(buffer_len);
char *temp_buf = malloc(buffer_len);
size_t len = buffer_len;
sprintf(temp_buf, "%d%s",htonl(num),dummy); //preparing the temp_buf
memmove(buffer, temp_buf, len);
printf("sizeof(temp_buf) = %d and sizeof(buffer) = %d\n",sizeof(temp_buf), sizeof(buffer));
printf("printing buffer = %s and temp_buf = %s\n", buffer,temp_buf);
我得到以下輸出:
sizeof(temp_buf) = 4 and sizeof(buffer) = 4
printing buffer = -771489 and temp_buf = -771489792bla
是的,這工作正常,我已經測試過。 –