| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2431 人关注过本帖
标题:[求助]写一个函数连接2个字符串(这个也有问题了)
只看楼主 加入收藏
baby69yy2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2007-4-5
收藏
 问题点数:0 回复次数:33 
[求助]写一个函数连接2个字符串(这个也有问题了)

这个更严重,编译不能通过。刚学指针,很多地方弄不好。请前辈指点一下。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int StrCatenate(char *s1,char *s2);
int main()
{
char *str1,*str2;
str1=(char*)malloc(sizeof(char));
str2=(char*)malloc(sizeof(char));
printf("Please input str1:\n");
scanf("%15s",str1);
printf("Please input str2:\n");
scanf("%15s",str2);
printf("result=%s\n",StrCatenate(str1,str2));
return 0;
}
int StrCatenate(char *s1,char *s2)
{
s1+=strlen(s1);
while(*s1++=*s2++);
}

搜索更多相关主题的帖子: char 函数 字符 include 
2007-08-07 11:46
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
s1+=strlen(s1);指针+int数据就能扩展长度??
你还是用
strcpy函数和strcat函数吧!!

要练习算法就来http:///!!有挑战哦!!
2007-08-07 11:59
baby69yy2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2007-4-5
收藏
得分:0 
回复:(viky2003) s1+=strlen(s1);指针+int数据就能...
程序那错了呢?我初学呀,好多地方不明白
int StrCatenate(char *s1,char *s2)这个有问题吧!!那错了呢??
谢谢各位前辈了!!

2007-08-07 12:04
baby69yy2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2007-4-5
收藏
得分:0 

程序这么该了,能通过编译了(vc++),但结果不对
Please input str1:
china \n
Please input str2:
chinese \n
result=(null)
结果怎么是空类型呢?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
StrCatenate(char *s1,char *s2);

int main()
{
char *str1,*str2;
str1=(char*)malloc(sizeof(char));
str2=(char*)malloc(sizeof(char));
printf("Please input str1:\n");
scanf("%15s",str1);
printf("Please input str2:\n");
scanf("%15s",str2);
printf("result=%s\n",StrCatenate(str1,str2));
return 0;
}
StrCatenate(char *s1,char *s2)
{
s1+=strlen(s1);
while((*s1=*s2)!='\0')
{
s1++;
s2++;
}
}

[此贴子已经被作者于2007-8-7 12:13:51编辑过]


2007-08-07 12:09
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
StrCatenate(char *s1,char *s2);

int main()
{
char *str1,*str2;
str1=(char*)malloc(100*sizeof(char));
str2=(char*)malloc(100*sizeof(char));
printf("Please input str1:\n");
scanf("%s",str1);
printf("Please input str2:\n");
scanf("%s",str2);
StrCatenate(str1,str2);
printf("result=%s\n",str1);
return 0;
}
StrCatenate(char *s1,char *s2)
{
s1+=strlen(s1);
while((*s1++=*s2++));
}


Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 12:50
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
看看和你的有什么不同吧

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 12:52
baby69yy2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2007-4-5
收藏
得分:0 
回复:(boot2046)看看和你的有什么不同吧

while((*s1++=*s2++));,前辈用的循环比我多了一对括号,编译通过,结果正确。
while((*s1++=*s2++));这个为什么要多加个括号呢?我不理解呢?

呵呵,又试了下,这么写也能通过
void StrCatenate(char *s1,char *s2)
{
while(*s1!='\0')
s1++;
while((*s1=*s2)!='\0')
{
s1++;
s2++;
}
}

[此贴子已经被作者于2007-8-7 14:24:08编辑过]


2007-08-07 14:09
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
呵呵,括号在这没什么影响的


我是在你的while((*s1=*s2)!='\0')上去掉!='\0',没去掉那个多余的括号而已

看的不够仔细哦

str1=(char*)malloc(100*sizeof(char));
str2=(char*)malloc(100*sizeof(char));

你分配内存的时候分配少了,要装一个字符串,你却只给了一个字节,这怎么能行呢

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 14:46
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 
正解如下:(请楼主试试)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *StrCatenate(char *s1,char *s2);
int main()
{
char *str1,*str2;
str1=(char*)malloc(sizeof(char));
str2=(char*)malloc(sizeof(char));
printf("Please input str1:\n");
scanf("%15s",str1);
printf("Please input str2:\n");
scanf("%15s",str2);
printf("result=%s\n",StrCatenate(str1,str2));
return 0;
}
char *StrCatenate(char *s1,char *s2)//函数必须返回操作数,即必须有输出接口
{ char *ps;//这里定义一个char 指针,使得其指想s1的初始地址
ps=s1;
s1+=strlen(s1);
while(*s1++=*s2++);
return ps; //返回s1的初始地址
}

2007-08-07 15:03
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
晕~~~ls是正解????






Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 15:13
快速回复:[求助]写一个函数连接2个字符串(这个也有问题了)
数据加载中...
 
   



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

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