如果我尝试存储的值大于动态分配期间指定的值,为什么c编译器不会引发错误?

问题描述 投票:0回答:1

这是我尝试过的。我甚至还没有以\0字符结束字符串。

#include <stdio.h>
#include <malloc.h>
#include <string.h>

int main()
{
    int size=5;
    char *str = (char *)malloc((size)*sizeof(char));
    *(str+0) = 'a';
    *(str+1) = 'b';
    *(str+2) = 'c';
    *(str+3) = 'd';
    *(str+4) = 'e';
    *(str+5) = 'f';
    printf("%d    %s", (int)strlen(str), str);
    return 0;
}

根据规则,如我在malloc中指定的,它只能存储4个字符和一个\0字符。它给了我完美的输出。

输出

6    abcdef

在这里查看:https://onlinegdb.com/B1UeOXbjH

c malloc dynamic-memory-allocation
1个回答
0
投票

C不计算其数组:如果您要请求一个多字节的内存块,它会通过一个指针为您提供该块,完全由您负责任地管理它。

这会带来一定的效率-编译器/运行时不会为您检查所有这些开销-但会给不正确的代码带来巨大挑战(已显示了示例)。>>

我们中的许多人都非常喜欢C的底层效率,但是有一个原因,很多人更喜欢Java或C#这样的语言来为您管理并强制执行数组范围。这是一个权衡。

© www.soinside.com 2019 - 2024. All rights reserved.