gpt4 book ai didi

c - printf ("%s", char*) 什么时候停止打印?

转载 作者:太空狗 更新时间:2023-10-29 16:34:57 25 4
gpt4 key购买 nike

在我的类里面,我们正在编写我们自己的 C 的 malloc() 函数副本。为了测试我的代码(目前可以很好地分配空间),我使用了:

char* ptr = my_malloc(6*sizeof(char));
memcpy(ptr, "Hello\n", 6*sizeof(char));
printf("%s", ptr);

输出通常是这样的:

Hello
Unprintable character

一些调试认为我的代码本身并不是造成这种情况的原因,因为 ptr 的内存如下:

[24 字节元信息][请求字节数][填充]

所以我认为 printf 正在进入填充,这只是垃圾。所以我进行了以下测试:printf("%s", "test\nd"); 得到:

test
d

这让我想知道,printf("%s", char*) 什么时候停止打印字符?

最佳答案

它在到达空字符 (\0) 时停止打印,因为 %s 期望字符串以空字符终止(即,它期望参数是C 字符串)。

字符串文字 "test\nd" 以空值终止(所有字符串文字均以空值终止)。但是,您的字符数组 ptr 不是,因为您只将六个字符复制到缓冲区 (Hello\n),并且您没有复制第七个字符 -- null终结者。

关于c - printf ("%s", char*) 什么时候停止打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com