鱼C论坛

 找回密码
 立即注册
查看: 4629|回复: 3

写一个函数,让字符串反序存放,请各位大虾门看看我写的程序有什么问题

[复制链接]
发表于 2013-5-29 15:08:38 | 显示全部楼层 |阅读模式
8鱼币
这个程序输出有乱码 但是乱码后字符串结果还输出出来了

# include<stdio.h>

char str(char a[50])
{
        int j=0;
        int n=0;
        int i=0;
        char t;

        for (;a[i]!='\0'; i++);

        n=i-1;
        j=i/2; //交换到一半 全部交换就又都回去了

        for(i=0;i<=j;i++)
        {
                t=a[i];
                a[i]=a[n];
                a[n]=t;
                n=n-1;
        }

        return a[n];
}

int main(void)
{
        char a[50];
        char b[50];

        gets(a);

        b[50] = str(a);

        printf("%s\n", b);

        return 0;
}


最佳答案

查看完整内容

代码仅供参考
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-29 15:08:39 | 显示全部楼层
  1. # include<stdio.h>

  2. int str(char a[])   //其实要实现楼主的功能,这个函数可以不要返回值,或者只要返回函数运行标记。
  3. {
  4.         int j=0;
  5.         int n=0;
  6.         int i=0;
  7.         char t;

  8.         for (;a[i]!='\0'; i++);

  9.         n=i-1;
  10.         j=i/2; //交换到一半 全部交换就又都回去了

  11.         for(i=0;i<=j;i++)
  12.         {
  13.                 t=a[i];
  14.                 a[i]=a[n];
  15.                 a[n]=t;
  16.                 n=n-1;
  17.         }

  18.         return 1;
  19. }

  20. int main(void)
  21. {
  22.         char a[50];
  23.         char b[50];

  24.         gets(a);

  25.         //b[50] = str(a);
  26.                 str(a);  //这个函数本身已经将数组a中的元素进行了转换,所以可以不要放回值,直接输出数组a中的元素就可以。

  27.         printf("%s\n", a);

  28.         return 0;
  29. }

复制代码
代码仅供参考
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-29 20:34:59 | 显示全部楼层
先指出楼主的一个错误:    b[50] = str(a);
上述赋值语句在C语言里面是不成立的,这也就是为什么你的结果里会出现乱码的原因,虽然编译器不会报错(已实验)。

下面,我是按照楼主的思路来修改代码,这里多定义一个指针变量,就可以成功规避语法上的漏洞了
  1. # include<stdio.h>
  2. char *str(char a[50])
  3. {
  4.         int j=0;
  5.         int n=0;
  6.         int i=0;
  7.         char t;
  8.         char *p;
  9.         p= a;

  10.         for (;a[i]!='\0'; i++);

  11.         n=i-1;
  12.         j=i/2; //交换到一半 全部交换就又都回去了

  13.         for(i=0;i<=j;i++)
  14.         {
  15.                 t=a[i];
  16.                 a[i]=a[n];
  17.                 a[n]=t;
  18.                 n=n-1;
  19.         }

  20.         return p;
  21. }

  22. int main(void)
  23. {
  24.         char a[50];
  25.         char *p;
  26.         gets(a);
  27.         p = str(a);
  28.         printf("%s\n", p);
  29.         return 0;
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-29 20:59:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-27 16:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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