| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2257 人关注过本帖, 1 人收藏
标题:关于字符串反转的问题
只看楼主 加入收藏
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
结帖率:96%
收藏(1)
已结贴  问题点数:2 回复次数:15 
关于字符串反转的问题
你们好,这里有一段关于字符串反转的代码,编译通过了,但是当运行的时候,输入字符串后,回车后,却弹出程序未响应,出错的对话框。请问是什么回事呢?谢谢!!

代码:
#include<stdio.h>
#include<string.h>

char strrev1(char *str);
int main()
{
    char *str,p;
    printf("input str:");
    scanf("%s",&str);
    p=strrev1(str);//字符串反转函数
    printf("%s\n",p);
    return 0;
}

char strrev1(char *str)
{
    char ch;
    int i,m,len;
    len=strlen(str);
    char *end=str+len-1;
    while(str<end)
    {
        ch=*str;
        *str++=*end;
        *end--=ch;
    }
    return *str;
}
搜索更多相关主题的帖子: include return 字符串 
2012-11-05 23:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
使用了空指针

授人以渔,不授人以鱼。
2012-11-05 23:44
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 2楼 TonyDeng
不是很懂哦!
2012-11-05 23:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
str没有分配空间,而且scanf()中不需取地址符。

授人以渔,不授人以鱼。
2012-11-05 23:53
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 4楼 TonyDeng
str=new char[10];去掉取址符后,还是不行呢。
2012-11-05 23:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己跟踪一下是哪行出错,我现在没时间测试。直接写char str[10]不就可以了,非要用指针。

授人以渔,不授人以鱼。
2012-11-06 00:04
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 6楼 TonyDeng
恩恩,好的,谢谢斑竹,想多点了解指针的。
2012-11-06 00:06
mengqingguo
Rank: 2
等 级:论坛游民
帖 子:25
专家分:36
注 册:2012-11-1
收藏
得分:0 
我运行的时候很多错误。我看见这个while(str《end)??什么意思?strcmp你看下这个函数是不是你要用的那个
2012-11-06 09:49
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 8楼 mengqingguo
while(str<end);意思是判断str的地址是否小于end的地址,不是要用到strcmp这个比较函数
2012-11-07 09:36
未名湖的云
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:130
专家分:190
注 册:2012-10-11
收藏
得分:0 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void strrev1(char *str);
void main()
{
    char *str;//你之前没有给str分配合适的内存单元指向,所以输入的时候字符串没有地方放置
    str = (char*)malloc(sizeof(char)*30);//这个是动态分配内存,这个最多只能输入30个字符~~~
    printf("input str:");
    scanf("%s",str);//这里str就是首地址,不需要加&取址符
    //最简单的事把上面都替换成以下
    //char str[5]="hello";
    strrev1(str);//字符串反转函数
    printf("%s\n",str);//输出的时候也是一样的,给它首地址,它会自动往下输出下一个字符,直到遇见‘\0’
}

void strrev1(char *str)//调用函数的时候,传的是首地址,函数体内加*后就是直接操作字符串了,不需要使用返回地址了,而且你返回的不是首地址
{
    char ch;
    char *end;
    int len;
    len=strlen(str);
    end=str+len-1;//end获取最后一个地址,因为是从0开始的
    while (str<end)
    {
        ch=*str;//ch中间变量
        *str++=*end;
        *end--=ch;
    }
}
不知道这是不是楼主需要的哦(测试木有问题~~~)
2012-11-07 20:01
快速回复:关于字符串反转的问题
数据加载中...
 
   



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

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