关于 printf("%*.*s/n",m,n,ch) 的问题

博客主要解释了printf函数中 *. * 组合的输出规则。点前面的 * 表示总的宽度,后面的 * 定义输出个数。若后面比前面小,用空格在左侧补够位数;若前面比后面小,前面的会被忽略,一般关注后面的 * 号,在VS2017和gcc测试结果相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 对于 printf(%*.*s\n,m,m,ch); ,这种printf 函数的输出我第一次看的时候很奇怪。下面就来解释一下。
  • 加入有下面的代码
#include<stdio.h>

int main()
{
	char* ch = (char*)"123456789";
	int m = 10,n = 2;
	printf("%*.*s\n",m,n,ch);
	printf("%*.*s\n",n,m,ch);
	return 0;
}

在这里插入图片描述

  • 我们可以看出来, * . * 这个组合中点 前面的 * 的意思是总的宽度,后面定义的是输出的个数。
  • 如果后面的比前面的小,则使用空格在左侧补够 m 位。
  • 如果前面的比后面的小,那么前面的将被忽略,所以我们一般只关注 点后面的 * 号。
  • 经过在 VS2017 和 gcc 是相同的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值