鱼C论坛

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

关于字符串反序的问题

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

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

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

x
  1. void string_in(char pc[])//定义的一个函数,功能是读取一个字符串,并将字符串反序
  2. {
  3.         char*pr=pc;
  4.         int a,i=0;
  5.         char temp;
  6.         while(*pr!='\0')//求这个字符串的字符个数和最后一个字符的地址
  7.         {
  8.         pr++;
  9.         i++;
  10.         }
  11.         for(a=0;a<i;i++)//将最后一个字符的地址 取值并将值赋给字符串数组的第一个字符位置
  12.         {
  13.                 temp=*--pr;
  14.                 *--pr=pc[a];
  15.                 pc[a]=temp;
  16.                
  17.         }
  18.         puts(pc);
  19. }
复制代码

请问我的程序哪里有问题吗?运行的时候就会中断,运行不了。求大神帮忙看一下~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

  3. void string_in(char pc[]);

  4. int main(void)
  5. {
  6.         char string[20] = "abcde";
  7.    
  8.         printf("原字符串为:");
  9.         puts(string);
  10.         string_in(string);

  11.         return 0;
  12. }

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

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

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

  33.                 pr--;
  34.                                     
  35.         }
  36.         printf("交换结果为:");
  37.         puts(pc);
  38. }
复制代码


附上运行结果图:
问题解决.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

...

感谢~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

懂了~感谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 08:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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