【问题标题】:Adding Strings and ssize_t? [closed]添加字符串和 ssize_t? [关闭]
【发布时间】:2015-10-22 13:29:18
【问题描述】:
我有一个关于添加字符串和数据类型的问题。在这样的算术中使用它们意味着什么? 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;
【问题讨论】:
标签:
c
arithmetic-expressions
【解决方案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 教科书或教程中查找“指针算术”。