strlen()
本帖最后由 haiouda 于 2015-3-28 18:12 编辑/****************************************************************************************************
有一个字符串,包含 n 个字符。写一个函数,将此字符串中从第 m 个字符开始的全部字符复制成为另一个字符串;
*****************************************************************************************************/
#if(1)
#include<stdio.h>
#include<string.h>
int main()
{
char *xd(char *p,char *u,int k);
char a,b,*t;
int m;
printf("输入一个字符串:");
gets(a);
printf("输入一个整数:m=");
scanf("%d",&m);
while (strlen(a)<m)
{
printf("输入错误!请重新输入:m=");
scanf("%d",&m);
}
t=xd(a,b,m);
printf("%s\n",a);
printf("%s\n",b);
printf("%s\n",t);
return 0;
}
char *xd(char *p,char *u,int k)
{
int i=0;
while(*(p+k)!=0)
{
*u=*(p+k);
p++;u++;i++;
}
*u=0;
return (u-i);
}
#endif第21行,改为: while (strlen(a)-m<0) ,程序变会出错,为何?(这个和下面的循环条件,在数学上明明是相等的)
把21行,改为: while ( m-strlen(a) >0),程序进入死循环?如果理解为,由于输入的m使循环条件一直成立,所以死循环,那么上面的怎么解释?
如果象上面,21行那样子,又会有警告,又是为什么?
以上我的输入字符串为:I love you!
#include<stdio.h>
#include<string.h>
int main()
{
char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/";
char str2 = "http://see.xidian.edu.cn/cpp/u/shipin_liming/";
char str3 = "12345";
printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3));
return 0;
}
第三行输出为何 是 53???
haiouda 发表于 2015-3-28 13:40
第三行输出为何 是 53???
原来strlen() ,不能计算不含0 ,结尾的字符串; haiouda 发表于 2015-3-28 13:40
第三行输出为何 是 53???
根据你提供的代码,char str3 = "12345";这一行运行是会报错的,超出了数据范围,溢出。如果是char str3 = "1234";这样就刚刚好,因为定义str3是5个位置,所以1234+“\n”刚刚好,"\n"是隐藏的。strlen(str3), sizeof(str3));第一个打印出来是这个字符串里面的字符个数,有4个,第二个是打印出str3的大小,所以是5。 本人知识有限,以上解答为本人的理解,如果有错,请见谅。 第21行,改为: while (strlen(a)-m<0) ,程序变会出错,为何?你觉得有可能出现当strlen(a)-m会小于0 的情况出现么?最多也就是等于0,改成 while (strlen(a)-m<=0) 就对了。
把21行,改为: while ( m-strlen(a) >0),程序进入死循环? 这个问题跟上面一样,都是逻辑出错,肯定会死循环啊。 ANDES 发表于 2015-3-28 17:17
第21行,改为: while (strlen(a)-m
首先 strlen(a),肯定会返回一个大正数(),因为前面字符串a 有输入且a 字符串用gets()函数输入,所以字符串a ,是个完整的字符串(以0结尾)。
所以下面:
while (strlen(a)-m<0) ,这里m是任意输入的,所以 strlen(a)-m<0 ,是可以出现的呀!
把它当做条件,放在whiel()里当条件,最多是死循环才对呀!
改为: while ( m-strlen(a) >0) ;这里,同上,也看不到错误呀??(strlen(a),返回一个正数)
haiouda 发表于 2015-3-28 17:36
首先 strlen(a),肯定会返回一个大正数(),因为前面字符串a 有输入且a 字符串用gets()函数输入,所以字 ...
行吧,你懂就行。 感觉你的程序代码有点问题啊 楼主 你的题问题和我在另外一贴中看到的是同一个问题,回复情况是一样的 http://bbs.fishc.com/thread-59789-1-1.html到这个 链接查看结果吧,希望你能有所收获!
页:
[1]