是strdup添加' \ 0'什么时候复制char数组?

时间:2015-04-16 00:29:23

标签: c strdup

我想知道strdup是否在新数组的末尾添加'\ 0',如果src数组不包含一个?

让我们假设我们有一个包含由这种malloc分配的“hello”的数组

malloc(sizeof(char) * 5);

5个字符的5个字节。

我猜src字符串没有为'\ 0'收到足够的内存。

在这种情况下应该发生什么?

2 个答案:

答案 0 :(得分:1)

strdup将确定输入字符串的长度 - 它将从您传递的指针中的地址开始,首先是该位置之后的第一个NUL字节。然后它将分配一个新的内存块并将该范围内的字节复制到新分配的块中。

因此,有两件事情会发生。输入将包含一个零字节,结果也将如此,否则strdup将读取您传递的输入的结尾,并且您将获得未定义的行为(但可能性很好#&# 39;最终会找到一个零字节,并将一堆额外的垃圾复制到重复的字符串中。

答案 1 :(得分:0)

strdup()在这种情况下会做的是从传递的字符串开始,继续查看内存直到它从已分配内存的末尾掉落(并且你得到一个SIGSEGV或类似的)或者找到一个发生的字节包含' \ 0'。

它将分配足够的内存以包含其扫描的所有内容的副本,包括' \ 0',然后复制所有内容。