我有一个关于添加字符串和数据类型的问题。在这种算术中使用它们意味着什么? body + size
是否意味着它正在创建一个包含它们的新内存块?
以下只是代码的摘录:
char* body;
ssize_t size = load();
char buffer[512];
body = realloc(body, size + octets);
if (body == NULL)
{
return -1;
}
memcpy(body + size, buffer, octets);
size += octets;
答案 0 :(得分:1)
char *body;
body
不是字符串,而是指针。如果它被适当地初始化,它可能指向到一个字符串,但它本身不是一个字符串。
ssize_t size;
size
是一个整数。
body + size
这是指针算术。它没有分配任何内存;它只需要一个指针值和一个整数,并产生一个新的指针值。如果body
指向数组的元素,则body + size
指向稍后在同一数组中的元素size
位置。 (如果body
未指向数组元素,或者body + size
超出数组范围,则行为未定义。)
memcpy(body + size, buffer, octets);
例如,假设body
指向100个char
元素数组的初始(第0个)元素,并假设为size == 30
。然后body + size
是同一数组的char*
值指向元素30。
在任何体面的C教科书或教程中查找“指针算术”。