当前位置: 代码迷 >> C语言 >> 关于strlen的问题
  详细解决方案

关于strlen的问题

热度:433   发布时间:2004-09-14 22:57:00.0
关于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  

----------------解决方案--------------------------------------------------------

有以下程序 #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界前辈了!


----------------解决方案--------------------------------------------------------

#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?


----------------解决方案--------------------------------------------------------

晕啊,妹妹。

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

第一个:输出5

第二个:20,30

第三个: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编辑过]


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

最后一个写掉了一句,

(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飘飘,为我写出如此详细解答,年龄上我长你一岁,但在学问上小女自叹不如!


----------------解决方案--------------------------------------------------------

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

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


----------------解决方案--------------------------------------------------------
ex1是argv[0]
----------------解决方案--------------------------------------------------------
KNOCKER说得没错,你不能把ex1(程序名)也算成是参数啊!
真正的参数只有    abcd efg 10    不计空格正好9个
----------------解决方案--------------------------------------------------------
  相关解决方案