wang815309286 发表于 2016-9-7 23:34:55

关于字符串反序的问题

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;
                pc=temp;
               
        }
        puts(pc);
}
请问我的程序哪里有问题吗?运行的时候就会中断,运行不了。求大神帮忙看一下~

星空·无限 发表于 2016-9-8 01:23:27

数组越界操作,还有就算不越界你的函数能交换成功吗?比如五个字符你要交换五次才停止,前三次就行了你还要强行交换。越界原因,*--pr两次相当于pr-2最后肯定向前越界了。

joker11111 发表于 2016-9-8 14:14:45

本帖最后由 joker11111 于 2016-9-8 14:15 编辑

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

void string_in(char pc[]);

int main(void)
{
        char string = "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;
                pc = temp;

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

附上运行结果图:

wang815309286 发表于 2016-9-8 15:48:44

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

...

感谢~~

wang815309286 发表于 2016-9-8 15:49:52

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

懂了~感谢~
页: [1]
查看完整版本: 关于字符串反序的问题