c语言是printf %s 遇到停止,关于C#:何时printf(“%s”,char *)停止打印?

在C语言中,printf函数遇到空字符('')时停止打印字符串。当使用`printf("%s", ptr)`时,如果ptr指向的字符数组未正确以空字符终止,可能会导致打印意外内容。在示例中,`memcpy(ptr, "Hello ", 6*sizeof(char))`没有复制空字符,因此打印会超出预期的'Hello ',显示内存中的垃圾数据。确保分配足够的空间并正确复制字符串,包括空终止符,以避免此类问题。" 131153869,10912945,R语言rms包lrm逻辑回归与列线图(诺模图)详解,"['R语言', '机器学习', '数据挖掘', '统计学', '数据可视化']
摘要由CSDN通过智能技术生成

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

char* ptr = my_malloc(6*sizeof(char));

memcpy(ptr,"Hello

", 6*sizeof(char));

printf("%s", ptr);

输出通常是这样的:

Hello

Unprintable character

一些调试发现我的代码本身并不是造成此问题的原因,因为ptr的内存如下:

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

因此,我认为printf进入了填充,这只是垃圾。 因此,我对以下内容进行了测试:

printf("%s","test

d");并得到:

test

d

这让我感到奇怪,何时printf("%s",char *)停止打印字符?

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

字符串文字"test

d"以Null终止(所有字符串文字以Null终止)。但是,字符数组ptr不是,因为您仅将六个字符复制到缓冲区(Hello)中,并且没有复制第七个字符-空终止符。

James对于将printf转换为空字符时停止它是正确的,而Uri是正确的,您需要分配7个字符的缓冲区来容纳" hello n"。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值