C语言中 strlen函数用法的问题
#include<stdio.h>#include<string.h>intmain(void){charsumame[20],firstname[20];printf(...
#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是这个*是指怎样输出啊? 展开
#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是这个*是指怎样输出啊? 展开
7个回答
展开全部
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
这个是输出匹配的问题。
举个例子
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
展开全部
虽然只有两个%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
因此 是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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
经过调试发现
%*d 后面跟两个参数
如
printf("%*d",a,b);
a表示打印的宽度,接着就是输出b的值
楼上说对了。。。
%*d 后面跟两个参数
如
printf("%*d",a,b);
a表示打印的宽度,接着就是输出b的值
楼上说对了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b[10],这个10是数组的大小,可以用sizeof来查看b的大小
strlen,用于确定字符串的长度,和数组大小无关,哪怕常常使用数组来存储字符串。它会从字符串首字符开始向后搜索,直到遇到
终止符
0。所以虽然输入了20个字母造成了溢出,却不妨碍strlen得到正确的长度
如果学会基本的调试操作,就可以直接在内存中查看字符串的值,没必要输出来看了
strlen,用于确定字符串的长度,和数组大小无关,哪怕常常使用数组来存储字符串。它会从字符串首字符开始向后搜索,直到遇到
终止符
0。所以虽然输入了20个字母造成了溢出,却不妨碍strlen得到正确的长度
如果学会基本的调试操作,就可以直接在内存中查看字符串的值,没必要输出来看了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符数组就是字符串,在存储方式上没啥区别。
但如果用strlen来获得字符串长度的话,是找到第一个0值就认为字符串结束了。
char
p[]={‘0’,‘1’,‘2’,‘3’,‘4’};这样的用strlen返回值是0。
其实要想知道一个存储单元的大小,应该用sizeof。比如刚才题的答案是sizeof(p)=4
但如果用strlen来获得字符串长度的话,是找到第一个0值就认为字符串结束了。
char
p[]={‘0’,‘1’,‘2’,‘3’,‘4’};这样的用strlen返回值是0。
其实要想知道一个存储单元的大小,应该用sizeof。比如刚才题的答案是sizeof(p)=4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询