鱼C论坛

 找回密码
 立即注册
查看: 1509|回复: 4

关于字符串反序的问题

[复制链接]
发表于 2016-9-7 23:34:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void string_in(char pc[])//定义的一个函数,功能是读取一个字符串,并将字符串反序 
{
        char*pr=pc;
        int a,i=0;
        char temp;
        while(*pr!='\0')//求这个字符串的字符个数和最后一个字符的地址 
        {
        pr++;
        i++;
        }
        for(a=0;a<i;i++)//将最后一个字符的地址 取值并将值赋给字符串数组的第一个字符位置 
        {
                temp=*--pr;
                *--pr=pc[a];
                pc[a]=temp;
                
        }
        puts(pc);
}
请问我的程序哪里有问题吗?运行的时候就会中断,运行不了。求大神帮忙看一下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-8 01:23:27 From FishC Mobile | 显示全部楼层
数组越界操作,还有就算不越界你的函数能交换成功吗?比如五个字符你要交换五次才停止,前三次就行了你还要强行交换。越界原因,*--pr两次相当于pr-2最后肯定向前越界了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-8 14:14:45 | 显示全部楼层
本帖最后由 joker11111 于 2016-9-8 14:15 编辑

楼上已然说明了问题,不过看到这个题目,还是手痒实现下,毕竟代码要多敲,多敲,多敲。。。
#include <stdio.h>
#include <conio.h>

void string_in(char pc[]);

int main(void)
{
        char string[20] = "abcde";
    
        printf("原字符串为:");
        puts(string);
        string_in(string);

        return 0;
}

void string_in(char pc[])//定义的一个函数,功能是读取一个字符串,并将字符串反序 
{
        char *pr = pc;
        int i,length = 0;
        char temp;

        while(*pr!= '\0')//求这个字符串的字符个数和最后一个字符的地址 
        {
                pr++;
                length++;
        }
        printf("length = %d\n", length);
        printf("pr = %s\n", pr);//此时pr指在'\0'的位置,所以打印不出任何字符
        pr--;
        printf("pr = %s\n", pr);

        for(i=0; i < length/2; i++)//将最后一个字符的地址 取值并将值赋给字符串数组的第一个字符位置 
        {
                                
                temp = *pr;
                *pr = pc[i];
                pc[i] = temp;

                pr--;
                                    
        }
        printf("交换结果为:");
        puts(pc);
}

附上运行结果图:
问题解决.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 15:48:44 | 显示全部楼层
joker11111 发表于 2016-9-8 14:14
楼上已然说明了问题,不过看到这个题目,还是手痒实现下,毕竟代码要多敲,多敲,多敲。。。

...

感谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 15:49:52 | 显示全部楼层
星空·无限 发表于 2016-9-8 01:23
数组越界操作,还有就算不越界你的函数能交换成功吗?比如五个字符你要交换五次才停止,前三次就行了你还要 ...

懂了~感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表