小编Ala*_*ios的帖子

重新分配与其偏移量不同的已分配内存块

如果我重新分配以前分配的内存区域的特定内存块会发生什么?


#include <stdlib.h>

int main(void)
{
    char *area = malloc(15 + 1);

    strcpy(area, "Stack / Overflow");
    realloc(area + 5, strlen(area) + 5);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

area在这个例子中,字符串是否会扩展为5个字节?

Idx: 0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21
Chr: S  t  a  c  k  \0 \0 \0 \0 \0     /       O   v   e   r   f   l   o   w   \0
Run Code Online (Sandbox Code Playgroud)

c memory-management realloc

2
推荐指数
1
解决办法
184
查看次数

C中"string"的定义

如果我错了,请纠正我,但符号"C string"指的是指向内存中3个或更多字节的指针,而第3个指针是NULL.


指针在内存中必须至少为4个字节(因为它们表示的地址值类似于整数,最有可能存储在4个字节中).这意味着一个指针可以指向一个没有溢出的偏移地址,而根据数据类型,将引用n个字节.如果是char,则只有要引用的偏移地址.因此,如果我们分配6个字节,int*我们最多可以有2个字符而没有任何流量.


如果上面说的和我改写是正确的.然后:

int* str = calloc(sizeof(int), 2);
Run Code Online (Sandbox Code Playgroud)

是一个最多可包含4个字符的字符串.如果我们想分别处理字节,我们可以使用类型转换.键入类型以忽略警告.除此之外的所有东西,看起来都像一根绳子.我哪里错了?

c string int

-4
推荐指数
1
解决办法
95
查看次数

是int foo(){return foo(); 一个递归函数?

将:

int foo();

int foo()
{
    return foo();
}
Run Code Online (Sandbox Code Playgroud)

永久循环或只运行两次函数(一次隐式,一次一次终止).

c recursion function

-6
推荐指数
1
解决办法
241
查看次数

标签 统计

c ×3

function ×1

int ×1

memory-management ×1

realloc ×1

recursion ×1

string ×1