添加字符串和ssize_t?

时间:2015-07-31 00:59:38

标签: c arithmetic-expressions

我有一个关于添加字符串和数据类型的问题。在这种算术中使用它们意味着什么? 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;

1 个答案:

答案 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教科书或教程中查找“指针算术”。