| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1668 人关注过本帖
标题:关于strlen的问题
只看楼主 加入收藏
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
结帖率:56.76%
收藏
 问题点数:0 回复次数:12 
关于strlen的问题
有以下程序 #include <string.h> main() {char *p="abcde\0fghjik\0"; printf("%d\n",strlen(p)); }

请问输出是多少?答案是12,为什么?strlen应该是统计字符串个数,不包含'\0',那我也数不出12呀,abcdefghjik只有11个啊!(我晕了)
搜索更多相关主题的帖子: strlen string main abcdefghjik char 
2004-09-14 22:57
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 

有以下程序 #include <stdio.h> main() {FILE *fp; int i=20,j=30,k,n; fp=fopen("d1.dat","w"); fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n); fclose(fp);

顺便问问,此题答案是20,50。其中50如何得来?望解释,

再此劳烦各位C界前辈了!


感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2004-09-14 23:12
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 

#include <string.h> main(int argc,char *argv[]) {int i,len=0; for(i=1;i<argc;i++) len+=strlen(argv[i]); printf("%d\n",len); }

为什么输出是9?


感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2004-09-15 00:10
lovever
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-9-13
收藏
得分:0 

晕啊,妹妹。

我运行了你的程序,结果全都对啊

第一个:输出5

第二个:20,30

第三个:0

2004-09-15 11:24
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

流星雨姐姐你还在努力的学C语言啊~~~ 老师最近终于给我们布置作业了~真多~很久都没上来看看了。 好,少废话,先看问题。

[1] 我们知道:一个字符串是以'\0'作为它的结尾标志的。 那么对于 abcde\0fghjik\0 来说其实这里有两个字符串。 他们分别是: abcde\0 和 fghjik\0 前一个的长度是5,后一个是6。 如果把*p认为是指向一个字符串的首地址,那么*p表示的字符串仅仅是abcde\0这个而已。这也就是楼上答案5的由来。

[2] 2050?你能得到50吗?那我也没话说了,把你的AMD拆下来好好降降温再试一次。答案是2030

[3] 这个是调用了主函数(main)的参数的问题。 首先我们先得了解main各个参数的作用。 其实也就2个~

1.argc参数。这个参数是个int的变量。它表示着外部命令输入的参数的个数,它最少不能少过1。 2.argv参数。这个就是很明显的啦,是一个不定长度的指针数组。 其中: argv[0]指向程序名(包括路径) argv[1]指向第一个参数 argv[2]指向第二个参数 . . . . argv[n]指向第N个参数

有了上面的知识我们就很容易理解你所问的问题了。

for(i=1;i<argc;i++) len+=strlen(argv[i]); 的作用是得到所有参数的字符数。

如果把你的程序取名为dd.exe,并且把它放在C:\下,那么在DOS命令符下我们输入 dd p 则程序就会输出1,这个是因为p只有1个字符的缘故。 当然啦,如果你输入pp 或者p<空格>p都输出2。 如果你什么参数都不输入则输出0。这就是楼上的答案为什么是0的原因

[此贴子已经被作者于2004-09-15 16:03:11编辑过]


淘宝杜琨
2004-09-15 16:00
Jorbo
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-9-8
收藏
得分:0 

楼上说的对啊,我也试了没有错啊!


2004-09-15 16:52
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 

最后一个写掉了一句,

(40)有以下程序 #include <string.h> main(int argc,char *argv[]) {int i,len=0; for(i=1;i<argc;i++) len+=strlen(argv[i]); printf("%d\n",len); } 程序编译连接后生成的可执行文件是ex1.exe, 若运行时输入带参数的命令行是: ex1 abcd efg 10<回车> 则运行的结果是?

答案是9,

其他的我也敢确定是答案错了,不过我没有把握,因为那是书上所写,不过非常感谢你神vLinux飘飘,为我写出如此详细解答,年龄上我长你一岁,但在学问上小女自叹不如!


感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2004-09-15 18:45
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 

for(i=1;i<argc;i++) len+=strlen(argv[i]); 的作用是得到所有参数的字符数。

那为何输入 ex1 abcd efg 10 会是9?空格不算也有12个数字啊?


感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2004-09-15 18:49
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
ex1是argv[0]

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-09-15 20:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
KNOCKER说得没错,你不能把ex1(程序名)也算成是参数啊!
真正的参数只有    abcd efg 10    不计空格正好9个

淘宝杜琨
2004-09-15 20:18
快速回复:关于strlen的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100762 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved