| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 803 人关注过本帖
标题:[讨论]两个程序的差别, 搞笑!
只看楼主 加入收藏
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
 问题点数:0 回复次数:10 
[讨论]两个程序的差别, 搞笑!

两个程序均想实现字符连接功能,第一个函数输出为:fdsaqwerfdsa,第二个输出正确,结果是qwerfdsa

请问,程序1错在何处?

程序1

char stringcat(char *str1,char *str2)
{
int c=strlen(str1);
for(;*(str1+c)=*str2,*str2!='\0';str1++,str2++)
;

printf("%s",str1);
}

void main()
{char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
s1=temp;
stringcat(s1,s2);
printf("%s",s1);
puts("\n");
getch();
}


程序2

char strcat1(char *str1,char *str2)
{
while(*str1!='\0')
str1++;
for(;*str1=*str2;str1++,str2++);
return *str1;
}

void main()
{char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
s1=temp;
stringcat(s1,s2);
printf("%s",s1);
puts("\n");
getch();
}


搜索更多相关主题的帖子: 搞笑 
2007-07-29 20:51
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 

对了我的环境是win-tc 1.91


2007-07-29 20:53
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 

oh my Holy God!i am so sorry,the code is right!


2007-07-29 21:06
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

#include<string.h>
#include<stdio.h>
char stringcat(char *str1,char *str2)
{
int c=strlen(str1);
for(;*(str1+c)=*str2,*str2!='\0';str1++,str2++)
;

/* 输出了两次(函数执行完后还有一次printf),去掉此处即可 printf("%s",str1); */
}


int main(void)
{
char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
/* 不用写两遍 s1=temp; */
stringcat(s1,s2);
printf("%s",s1);
puts("\n");
getch();
return 0;
}


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-07-30 08:34
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(卧龙孔明)#include#include...
为什么多写一次就会得出错误的结果???

2007-07-30 09:39
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 

这样也应该可以:
char stringcat(char *str1,char *str2)
{
/* char *ps=str1;*/
int c=strlen(str1);
for(;*(str1+c)=*str2,*str2!='\0';str1++,str2++)
;

return str1-c;/* return ps; */
}


void main()
{char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
s1=stringcat(s1,s2);
printf("%s",s1);
puts("\n");
getch();
}

[此贴子已经被作者于2007-7-30 9:52:26编辑过]


2007-07-30 09:48
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用anelwl在2007-7-30 9:39:34的发言:
为什么多写一次就会得出错误的结果???

多写一次本质是无误的,但是多写一次printf就与真正应输出的数据不同了(因为输出了两次)


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-07-30 10:18
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 

我知道了:
char stringcat(char *str1,char *str2)
{
int c=strlen(str1);
for(;*(str1+c)=*str2,*str2!='\0';str1++,str2++)
;

printf("%s",str1);/*这里str1的地址其实已经指向了str2,因此输出为str2的字符串 */
}


void main()
{char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
s1=temp;
stringcat(s1,s2);/*调用函数,输出s2的字符串*/
printf("%s",s1);/*这才是拷贝后的字符串*/
puts("\n");
getch();
}


2007-07-30 10:56
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
以下是引用anelwl在2007-7-30 10:56:34的发言:

我知道了:
char stringcat(char *str1,char *str2)
{
int c=strlen(str1);
for(;*(str1+c)=*str2,*str2!='\0';str1++,str2++)
;

printf("%s",str1);/*这里str1的地址其实已经指向了str2,因此输出为str2的字符串 */
}


void main()
{char *s1,temp[50]="qwer";
char *s2="fdsa";
s1=temp;
printf("%s",s1);puts("\n");
printf("%s",s2);puts("\n");
s1=temp;
stringcat(s1,s2);/*调用函数,输出s2的字符串*/
printf("%s",s1);/*这才是拷贝后的字符串*/
puts("\n");
getch();
}

你说的不对,str1没有指向str2,错在str1当时已经指向初始地址+c了。


2007-07-30 20:14
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
以下是引用jianweichief在2007-7-30 20:14:59的发言:

你说的不对,str1没有指向str2,错在str1当时已经指向初始地址+c了。

提两点建议:
(1)此时的str1 = str1 + strlen(str2);
(2)返回值最好返回最初的str1,类型为char*,而不要返回char


2007-07-30 20:57
快速回复:[讨论]两个程序的差别, 搞笑!
数据加载中...
 
   



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

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