| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1304 人关注过本帖
标题:[求助]字串逆序输出很意外
只看楼主 加入收藏
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
结帖率:66.67%
收藏
 问题点数:0 回复次数:12 
[求助]字串逆序输出很意外
main()
{
char a[]="afjkdlsa",b[80];
printf("%s",unstr(a));
getch();
}

//交换字符
int swapch(char *x,char *y)
{
char tmp;
tmp=*x;*x=*y;*y=tmp;
}

//字串逆序
int unstr(char *str)
{
int i,lenth;char tmp;
lenth=strlen(str);
for(i=0;i<lenth/2;++i)
{
tmp=*(str+i);
*(str+i)=*(str+lenth-i-1);
*(str+lenth-i-1)=tmp;
}
}

//字串长度
int strlen(char *str)
{
int len=0;
while(*(str+len)!='\0')++len;
return len;
}

在win-tc下输出 Turbo-C - Copyright (c) 1988 Borland Intl.
在C-Free3.5下没输出,程序非法.
这是为什么??我的代码在哪错了?
搜索更多相关主题的帖子: 字串逆序 str tmp char int 
2005-11-17 14:45
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 

main()
{
char a[]="afjkdlsa",b[80];
printf("%s\n",a);
printf("%s\n",unstr(a));
printf("%s\n",a);
getch();
}

改成这运行一下,再想想自己错在什么地方
注意你的子函数的返回值。


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-17 15:33
盖茨他爹
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:5255
专家分:0
注 册:2005-5-3
收藏
得分:0 
baidu大人果然出手不凡
2005-11-17 15:38
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
有些东西自己领会才会有趣

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-17 15:41
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 
以下是引用baidu在2005-11-17 15:41:00的发言:
有些东西自己领会才会有趣

int unstr(char *str)
{
int i,lenth;char tmp;
lenth=strlen(str);
for(i=0;i<lenth/2;++i)
{
tmp=*(str+i);
*(str+i)=*(str+lenth-i-1);
*(str+lenth-i-1)=tmp;
}
return str;
}

不明白为什么要返回这个地址,我写的其它几个字串函数没红的那行也行,请版主讲讲吧


其实我也很无聊!
2005-11-17 19:49
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
这个函数语法是错的

int /*这里定义了返回一个int */unstr(char *str)
{
int i,lenth;char tmp;
lenth=strlen(str);
for(i=0;i<lenth/2;++i)
{
tmp=*(str+i);
*(str+i)=*(str+lenth-i-1);
*(str+lenth-i-1)=tmp;
}
return str;//这里实际返回的是char *
}

还是看书吧,如果要把这个问题说清楚得打不少字,应该在函数返回值这个章节。有具体的问题再问吧,我只能告诉你一个大概。




偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-17 20:45
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
[QUOTE]不明白为什么要返回这个地址[/QUOTE]

具体到你这个程序,不一定要返回值。按我上面说的,其它的不改,就改成

main()
{
char a[]="afjkdlsa",b[80];
printf("%s\n",a);
printf("%s\n",unstr(a));//这里的结果是错的
printf("%s\n",a);//这里的结果是对的
getch();
}

后个是对的,说明你的unstr确实是将字串逆序了。前一为什么是错?因为你定义了unstr有一个int的返回值却没有在unstr返回任何东西,printf调用中不管这么多,去栈中取了一个没有意义的值当成返回值来用了。

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-17 20:59
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 
谢谢版主,我先看书去

其实我也很无聊!
2005-11-17 21:56
IT_BoBo
Rank: 1
等 级:新手上路
帖 子:623
专家分:0
注 册:2005-11-1
收藏
得分:0 
baidu还是活在C版。。。。

……吹、吹、吹个大气球,吹大了气球玩球球……
2005-11-18 20:25
zhai2651173
Rank: 1
等 级:新手上路
帖 子:303
专家分:0
注 册:2005-11-5
收藏
得分:0 
baiduVERY好

日本小子有种和我单挑...................坯试日本
2005-11-20 09:25
快速回复:[求助]字串逆序输出很意外
数据加载中...
 
   



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

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