当前位置: 代码迷 >> C语言 >> [求助]一个初学者的一点问题!
  详细解决方案

[求助]一个初学者的一点问题!

热度:405   发布时间:2006-09-10 22:11:25.0
[求助]一个初学者的一点问题!

strcen(char a[],char b[])
{
int num=0,n=0;
while(*(a+num)!='\0')num++;
while(b[n])
{
*(a+num)=b[n];
num++;
n++;
}
*(a+num)='\0';
return(num);
}
main()
{
char x[]="abcdefg",y[]="hijklmn";
int num;
strcen(x,y);
printf("%d",num);
getch();
}
这个是小弟自己写的一个程序啊!
把b字符串连接到a字符串的后面,并返回a中新串的长度!
这个程序运行结果不真确啊!
请帮小弟指出来!改正啊!


----------------解决方案--------------------------------------------------------
以下是引用zero442在2006-9-10 22:11:25的发言:

strcen(char a[],char b[]) //这个应该是一个有返回值的函数
{
int num=0,n=0;
while(*(a+num)!='\0')num++;
while(b[n])
{
*(a+num)=b[n];
num++;
n++;
}
*(a+num)='\0';
return(num);
}
main()
{
char x[]="abcdefg",y[]="hijklmn"; //因为以后还有给x[]数组增加数值,所以,这里你应该给它个范围如 x[20]
int num;
strcen(x,y);    // 这里应该是 num=strcen(x,y)
printf("%d",num);
getch();
}
这个是小弟自己写的一个程序啊!
把b字符串连接到a字符串的后面,并返回a中新串的长度!
这个程序运行结果不真确啊!
请帮小弟指出来!改正啊!


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

#include"stdio.h"
int strcen(char *a,char *b)
{

int i=0,j=0;
while(*(a+i)!='\0')
i++;
while(*(b+j)!='\0')
{
*(a+i+j)=*(b+j);
j++;

}
*(a+i+j)='\0';
return j+i;
}
void main()
{
char x[50]="abcdefg",y[50]="hsfdgsdfhdfhsdfh";
int num;
num=strcen(x,y);
printf("%d",num);

}
哎,要睡觉了,看看合你意思吧


----------------解决方案--------------------------------------------------------
以下是引用zero442在2006-9-10 22:11:25的发言:

strcen(char a[],char b[])
{
int num=0,n=0;
while(*(a+num)!='\0')num++;
while(b[n])
{
*(a+num)=b[n];
num++;
n++;
}
*(a+num)='\0';
return(num);//没有必要
}
main()
{
char x[]="abcdefg",y[]="hijklmn";//如此定义则限制数组大小,要复制的内容放在何处?
int num;
strcen(x,y);
printf("%d",num);//觉得这里输出的是字符串X而不是长度
getch();
}
这个是小弟自己写的一个程序啊!
把b字符串连接到a字符串的后面,并返回a中新串的长度!
这个程序运行结果不真确啊!
请帮小弟指出来!改正啊!


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

以下是引用nuciewth在2006-9-10 23:50:35的发言:

以下是引用zero442在2006-9-10 22:11:25的发言:

strcen(char a[],char b[])
{
int num=0,n=0;
while(*(a+num)!='\0')num++;
while(b[n])
{
*(a+num)=b[n];
num++;
n++;
}
*(a+num)='\0';
return(num);//没有必要
}
main()
{
char x[]="abcdefg",y[]="hijklmn";//如此定义则限制数组大小,要复制的内容放在何处?
int num;
strcen(x,y);
printf("%d",num);//这里是-858993460,num不知道该等于啥~~
getch();
}
这个是小弟自己写的一个程序啊!
把b字符串连接到a字符串的后面,并返回a中新串的长度!
这个程序运行结果不真确啊!
请帮小弟指出来!改正啊!


----------------解决方案--------------------------------------------------------
看来楼主没有领会到我的意思.你的做法有点本末倒置.
我是说,你的程序是字符串连接,只要做好连接,并能正确的显示出来就可以了,返回num没有必要,如果a[]里有乱码,但恰好num又返回正确(程序可能某些逻辑错误导致),这样你还是没有办法证明你的程序是对的.

void strcen(char a[],char b[])
{
int num=0,n=0;
while(*(a+num)!='\0')num++;
while(b[n])
{
*(a+num)=b[n];
num++;
n++;
}
*(a+num)='\0';

}
main()
{
char x[50]="abcdefg",y[30]="hijklmn";//如此定义则限制数组大小,要复制的内容放在何处?

strcen(x,y);
printf("%s\n",x);
getch();
}

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

这个是小弟自己写的一个程序啊!
把b字符串连接到a字符串的后面,并返回a中新串的长度!
这个程序运行结果不真确啊!
请帮小弟指出来!改正啊!

版主,人家问的是返回新字符串的长度,呵呵


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


题目都没看清,那就加上吧,不过printf("%s\n",a);是不能少的.
----------------解决方案--------------------------------------------------------
这种问题随便看几下c语言的书不就行啦
多看书啦,书是最好的老师
不过在这里和大家一起讨论也是蛮不错的
呵呵
----------------解决方案--------------------------------------------------------
[QUOTE]
char x[]="abcdefg",y[]="hijklmn";//如此定义则限制数组大小,要复制的内容放在何处?
[/QUOTE]
这里我原本真的不知道会造成这个样的后果啊!!
谢谢拉!现在我懂了!

----------------解决方案--------------------------------------------------------
  相关解决方案