c - 添加字符串和 ssize_t?

标签 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;

最佳答案

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

关于c - 添加字符串和 ssize_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736500/

相关文章:

c - scanf 格式的空白字符问题

c# - C#中的基本算术运算是原子的吗

scheme - 科学记数法转换 - 方案

c - printf() 正在打印错误的值

c - 在C中动态分配二维数组的总和

c - "call by reference"和全局变量的区别

c - k&r 示例,温度转换

python - 使用 python 数组列进行算术运算

C++ 隐式转换(有符号 + 无符号)

c - 如何构建具有相似名称的多个目标?