两个程序均想实现字符连接功能,第一个函数输出为: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);
}
{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
{
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();
}
----------------解决方案--------------------------------------------------------
对了我的环境是win-tc 1.91
----------------解决方案--------------------------------------------------------
oh my Holy God!i am so sorry,the code is right!
----------------解决方案--------------------------------------------------------
#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;
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
这样也应该可以:
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编辑过]
----------------解决方案--------------------------------------------------------
为什么多写一次就会得出错误的结果???
多写一次本质是无误的,但是多写一次printf就与真正应输出的数据不同了(因为输出了两次)
----------------解决方案--------------------------------------------------------
我知道了:
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();
}
----------------解决方案--------------------------------------------------------
我知道了:
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了。
----------------解决方案--------------------------------------------------------
你说的不对,str1没有指向str2,错在str1当时已经指向初始地址+c了。
提两点建议:
(1)此时的str1 = str1 + strlen(str2);
(2)返回值最好返回最初的str1,类型为char*,而不要返回char
----------------解决方案--------------------------------------------------------