【问题标题】:strlen of char* mallocstrlen of char* malloc
【发布时间】:2023-03-14 03:37:02
【问题描述】:

我有以下代码

char *new_str;
int size_in_bytes;
int length;

size_in_bytes = 2*sizeof(char);
new_str = (char *)malloc(size_in_bytes);
length = strlen(new_str);

期望长度为 2,实际上是 16。 谁能解释一下原因?

【问题讨论】:

  • 此代码读取超出分配的内存,可能导致未定义的行为
  • 使用calloc(),你会得到正确的答案(应该是0)。没有(便携式)方法可以确定分配块的大小(除非最新标准中有新内容)。

标签: malloc strlen


【解决方案1】:

strlen() 返回第一个空字节 ('\0') 的索引,从您传递的地址开始。 C 中的字符串通常总是以这个字符结尾,以标记字符串的结尾。

strlen() 不返回实际内存块的长度。

在您的示例中,内存未初始化,并且 strlen() 正在读取内存块的末尾并进入程序堆的其他部分,直到找到一个空字节。

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2021-03-04
    相关资源
    最近更新 更多