【问题标题】: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 教科书或教程中查找“指针算术”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多