h-b-z-d-j-s-m 发表于 2022-10-28 15:01:02

逆序存放

#include<stdio.h>
#include<string.h>
void fun(char m[],char n[]);
int main()
{
        char *a,*b;
        scanf("%s",&a);
        fun(a,b);
        printf("%s",b);
}
void fun(char m[],char n[])
{
        int i,j=0,t;
        t=strlen(m);
        for(i=t-1;i>=0;i--)
        {
                m=m;
                j++;
        }
}
为什么运行不出来,函数调用形式可以设为char fun(char m[],char n[])吗

dolly_yos2 发表于 2022-10-28 15:14:07

看看主函数里 a 和 b 的定义,您想把字符串往什么空间里写?有给它们合适的存储空间吗?

jackz007 发表于 2022-10-28 15:35:58

本帖最后由 jackz007 于 2022-10-28 15:58 编辑

int main()
{
      char *a,*b;
      scanf("%s",&a);// 指针 a 并未指向任何内存地址,执行此句程序十有八九会奔溃
. . . . . .
void fun(char m[],char n[])
{
. . . . . .
      for(i=t-1;i>=0;i--)
      {
                m=m ; // 这一句是什么意思?
      修改版:
#include<stdio.h>
#include<string.h>

void fun(char m[], char n[])
{
      int i , j , t                                 ;
      t =strlen(m)                              ;
      for(i = 0 ; i < t ; i ++) n = m ;
      n = '\0'                                 ;
}

int main()
{
      char a , b ;
      scanf("%s",&a)       ;
      fun(a , b)         ;
      printf("%s\n" , b)   ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
ABCDEF
FEDCBA

D:\\C>

dolly_yos2 发表于 2022-10-28 16:03:03

jackz007 发表于 2022-10-28 15:35
修改版:

      编译、运行实况:

其实也没有十有八九会崩溃这么一说。尽管非常不推荐,但是如果上下能对应起来的话这么写也是能工作的,只不过允许的最长输入长度比较短,像这样
#include<stdio.h>
#include<string.h>
void fun(char m[]);
int main()
{
      char *a;
      scanf("%s",&a);
      printf("%s\n",&a);
      fun(&a);
      printf("%s",&a);
}
void fun(char m[]){

      int i=0,j;
      char t;
      j=strlen(m) - 1;
      while(i < j)
      {
                t = m;
                m = m;
                m=t;
      }
}
其中进行逆序部分的操作逻辑上有问题,做了比较大刀阔斧的改动
页: [1]
查看完整版本: 逆序存放