[英]How to store and access integers and void* from a void* buffer in C?
我是一個相對較新的C程序員,我有以下問題:
void someFunction(int sizeOfArg1, void* arg1, int sizeOfArg2, void* arg2)
{
// Buffer to store sizeOfArg1, arg1, sizeOfArg2, arg2
void* buffer = malloc(sizeof(int) + sizeof(int) + sizeOfArg1 + sizeOfArg2);
// How to store variables into buffer and access again?
...
}
基本上,我想要做的是將someFunction的參數存儲到void *緩沖區中,稍后再次訪問它。 這包括存儲sizeOfArg1,arg1,sizeOfArg2和arg2。
這里,sizeOfArg1是arg1的字節大小,sizeOfArg2是arg2的字節大小。 arg1和arg2是void *指針。
對於單個變量,我知道你可以使用memcpy()或strlen()(如果參數是一個字符串)。 此外,如果所有參數都是單個定義的類型,我理解指針算法可用於存儲變量。 但是,我想要做的是稍后存儲和檢索每個值。
我試圖解決這個問題的原因是因為我需要將緩沖區傳遞給sendto()函數,以便通過UDP從客戶端向服務器發送一些信息。 sendto()函數接受void * buf參數。
我在網上查看了各種來源,其中指出由於對齊問題,無法使用void *上的指針算法,我無法從我看了幾個小時的來源中弄清楚如何解決這個問題。
任何幫助,將不勝感激。
請改用char緩沖區。
#include <stdint.h> // uint32_t
void func(uint32_t size1, void *arg1, uint32_t size2, void *arg2) {
uint32_t nsize1 = htonl(size1), nsize2 = htonl(size2);
uint32_t size = sizeof(size1) + sizeof(size2) + size1 + size2;
char *buf = malloc(size);
memcpy(buf, &nsize1, sizeof(nsize1));
memcpy(buf + sizeof(size1), arg1, size1);
memcpy(buf + sizeof(size1) + size1, &nsize2, sizeof(nsize2));
memcpy(buf + size - size2, arg2, size2);
// sock and dest_addr need to come from somewhere
sendto(sock, buf, size, 0, dest_addr, sizeof(dest_addr));
free(buf);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.