姬世鹏 发表于 2019-12-13 20:22:12

返回值好像越界了,为什么?

#include <stdio.h>
#define max 100

char *mystyle(char *array, int i);
char *mystyle(char *array, int i)//将接收的数组位置颠倒后返回
{
        int k = i - 1;
        char *m = &array; //将指针指向array的最末端
        printf("%d\n",i)//检验i值是否正确

      for(;k > 0;k--)
      {
                m = *array++;

      }
      
      return array;
}
int main(void)
{
      char num;
      int i;
               
                printf("请输入一个字符串\n");
      for(i = 0;(num = getchar()) != '\n';i++)
      {
             if(i == max - 1) num= '\0';
      }
      printf("%s\n",mystyle(num,i));

                return 0;
}

Croper 发表于 2019-12-13 20:22:13

你这写得太糊了,两个函数都有问题。char *mystyle(char *array, int i)//将接收的数组位置颠倒后返回
{
      int k = i - 1;
      char *m = &array; //将指针指向array的最末端
      printf("%d\n",i)//检验i值是否正确

      for(;k > 0;k--)
      {
                m = *array++;

      }
      
      return array;
}
m已经等于array+k了,m早就越界到哪个地方去了
       for(i = 0;(num = getchar()) != '\n';i++)
      {
             if(i == max - 1) num= '\0';
      }
所以你做的所有事是在i=99的时候,在num的地方加一个零,没输入99个字符就什么也不干。


先理清思路再来写

给个参考:char *mystyle(char *array, int i)//½«½óêÕμÄêy×éλÖÃμßμ1oó·μ»Ø
{
        char *p=array;
        char *q=array+i-1;
        while (p<q){
                char t=*p;
                *p++=*q;
                *q--=t;
        }
        return array;
}
int main(void)
{
      char num;   
                memset(num,0xCC,sizeof(num));
      printf("Çëêäèëò»¸ö×Ö·û′®\n");
               scanf("%s",num);
      printf("%s\n",mystyle(num,strlen(num)));
                return 0;
}

姬世鹏 发表于 2019-12-14 13:42:16

Croper 发表于 2019-12-13 21:33
你这写得太糊了,两个函数都有问题。
m已经等于array+k了,m早就越界到哪个地方去了



打扰一下,
memset(num,0xCC,sizeof(num));//这里填充0xCC的作用是什么啊?初学者不太懂。{:10_266:}

Croper 发表于 2019-12-14 15:40:41

-_-! 不要这句,我测试是否有越界时没删掉留下来的
页: [1]
查看完整版本: 返回值好像越界了,为什么?