C语言中 strlen函数用法的问题

#include <stdio.h>
#include <string.h>
int main(void)
{
char sumame[20],firstname[20];
printf("Please input your firstname and sumame.");
scanf("%s",firstname);
scanf("%s",sumame);
printf("%s %s.\n",firstname,sumame);
printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame),
strlen(sumame));
return 0;

这个程序是用作 输入姓名 然后输出姓名和姓名字数
为什么这里
printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame), strlen(sumame));
要strlen4次呢?不是两个变量嘛?还有%*d是这个*是指怎样输出啊?

printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame), strlen(sumame));
这个是输出匹配的问题。
举个例子
printf("%5d",5); 就会给你5个空间输出5,前面4个空格,然后输出5.
printf("%*d",5,5);和上面一样,利用*匹配5控制输出宽度。就是四个空格5.

同理上面的第一个strlen是作为输出宽度而存在的,也就是说给你字符串长度个空间,用于存放字符串长度的变量。
比如输入
we
women
就相当于
printf("%*d%*d",2,2,5,5);
相当于
printf("%2d%5d",2,5);输出 【1个空格】2【4个空格】5
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-22
虽然只有两个%d 但是不要忘了 那个*号 这个是输出宽度

因此 是4个参数

Please input your firstname and sumame.1234
123456
1234 123456.
4 6
Press any key to continue

用长度做个长度参数输出的宽度 不知道你能听明白吗?

printf("%*d%*d\n",
strlen(firstname) 对应第一个*
,strlen(firstname) 对应第一个%d
,strlen(sumame), 对应第二个*
strlen(sumame));对应第二个%d
第2个回答  2012-08-22
经过调试发现
%*d 后面跟两个参数

printf("%*d",a,b);
a表示打印的宽度,接着就是输出b的值

楼上说对了。。。
第3个回答  2019-10-22
b[10],这个10是数组的大小,可以用sizeof来查看b的大小
strlen,用于确定字符串的长度,和数组大小无关,哪怕常常使用数组来存储字符串。它会从字符串首字符开始向后搜索,直到遇到
终止符
0。所以虽然输入了20个字母造成了溢出,却不妨碍strlen得到正确的长度
如果学会基本的调试操作,就可以直接在内存中查看字符串的值,没必要输出来看了
第4个回答  2019-06-14
字符数组就是字符串,在存储方式上没啥区别。
但如果用strlen来获得字符串长度的话,是找到第一个0值就认为字符串结束了。
char
p[]={‘0’,‘1’,‘2’,‘3’,‘4’};这样的用strlen返回值是0。
其实要想知道一个存储单元的大小,应该用sizeof。比如刚才题的答案是sizeof(p)=4

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网