♣
请问各位,这个函数错在哪里?编译通过,运行错误。
这个函数的功能是将字符串逆序,输出
void reverse_string(char *str)
{
char *last_char;
for(last_char=str; *last_char!=\0; last_char++);
last_char--;
while(str<last_char)
{
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
printf("%s",str);
}
· 网友精彩回答:
void reverse_string(char *str)
{
char *last_char;
for(last_char=str; *last_char!=\0; last_char++);
last_char--;
char* old_str=str;
while(old_str<last_char)
{
char temp;
temp=*str;
*str++=*last_char;// 你的str也在变化
*last_char--=temp;
}
str=old_str;
printf("%s",str);
}
已调试
void reverse_string(char *str)
{
char *last_char, *strbackup = str;
int halfstr_len, tmp = 1;
for(last_char=str; *last_char!=\0; last_char++);
halfstr_len = ( last_char - str ) / 2;
last_char--;
//可以改成for循环
while( tmp <= halfstr_len )
{
char temp;
temp = *str;
*str++ = *last_char;
*last_char-- = temp;
++tmp;
}
printf("%s", strbackup);
}
void reverse_string(char *str)
{
char *last_char;
for(last_char=str; *last_char!=\0; last_char++);
last_char--; //这里只是为了求串长,就用库函数好了啊
//last_char=strlen(str);
while(str<last_char) //条件有误,你要的是比较位置,
//而不是比较字符的大小
{
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
printf("%s",str);
}
改成这样:
int num,position=0;
for(last_char=str; *last_char!=\0; last_char++);
last_char--; //指导串尾
num=strlen(str); //串长度
while(position<num)
{
temp=*str;
*str++=*last_char;
*last_char--=temp;
};
printf("%s",str);
void reverse_string(char *str)
{
int i=0; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
char *last_char;
for(last_char=str; *last_char!=\0; last_char++);
last_char--;
while(str<last_char)
{
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
i++; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
}
str-=i; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
printf("%s",str);
}
#include <stdio.h>
void reverse_string(char *str)
{
char *last_char=str;
while(*last_char!=\0)
last_char++;
last_char--;
while(str<last_char)
{
char temp;
temp=*str;
*str=*last_char;
*last_char=temp;
str++;
last_char--;
}
}
main()
{
char a[]="abcde";
reverse_string(a);
printf("%s",a);
}
已调试通过
原因在于你原来子函数 中while(str<last_char)
{
char temp;
temp=*str;
*str++=*last_char;
*last_char--=temp;
}
printf("%s",str);
其实str指针已经移动了啊,所以就不能输出整个字符串了,我现在把这一句移到主函数中,就行了。
char* str="abcde";
相当于常量,不可以再对str的内容进行改变,将char *str变为char str[]即可.
另外输出是str指针指向当前位置,不再是字符串的首地址了
- 更多问题:
- · 亚太板块变得越发脆弱 日本将遭受灭顶之灾
- · 请推荐一下关于tomcat的资源站点(中文)。
- · 博士街头当乞丐?
- · 标题有点那个,还是不写了吧
- · "\u4E66\u5199\u8BC4\u8BBA"是什么编码?怎么转换成汉字?
- · 如何在Eclipse中安装Swt designer?
- · 太郁闷了,上来发泄一下。
- · hibernate 中得子查询,怎么修改(多对一得关系)。请高手看看,谢谢!
- · ASP访问DBF和ACCESS的问题
- · 发布免费软件:Contact.Net V1.0 --个人关系管理,欢迎使用哈! --放分
- · 大家说一下换工作时,是先和新单位签合同,还是先和原单位提出离职的?是不是一般都是第一天上班才签合同的?
- · 大家说一下换工作时,是先和新单位签合同,还是先和原单位提出离职的?是不是一般都是第一天上班才签合同的?
- · C#引用和C指针有什么区别?
- · sql中用print打印三角之后的简化问题--急,有分!
- · <a href="pp://$a$[123456]">进者有分</a>
- · ■紧急求助:我做有一个QQ挂级的软件,测试的结果是:一台电脑最多只能上线1800多个QQ,为什么啊?■
- · DataGrid技术文档
- · VBScript技术文档 | VBScript
- · 遍历的常用技术文档
- · 模块与模块化
- · 软件工程专栏 | 软件工程
- · 检索与索引
- · ntfs文件
- · 入侵xp
- · 改mac
- · asp入侵
- · dns域名解析
- · adobe pdf
- · doc格式
- · borland turboc 3.0
- · 系统后门
- · ghost软件
- · 2001年5月那场轰动全球的中美黑客大战是什么回事?
- · 请问系统恢复软件哪款效果好?
- · 系统故障恢复控制台
- · 如何恢复xp系统管理员的管理权限
- · 一键ghost恢复系统
- · 一款类似Ghost的系统备份恢复软件ImageIt
- · 可以用U盘制作windowsxp系统恢复盘吗
- · 系统恢复方法
- · firefox2.0

