hickttye 发表于 2019-6-26 14:36:28

strcpy问题

#include <stdio.h>
#include <string.h>
#define SIZE 81

void opposite(char a1[]);

int main(void)
{
        char str;

        printf("Please enter a string:\n");
        while (gets(str))
        {
                opposite(str);
                puts(str);
                puts("Please enter the string again.");
        }

        getchar();
        return 0;
}

void opposite(char a1[])
{
        char a2;
        int i, j;

        for ( i = (strlen(a1)-1),j=0; i >= 0; i--,j++)
                a2 = a1;
        a2 = '\0';
        puts(a2);
        strcpy(a1, a2);
}

为什么我a2打印出来最后会多一个问号?

风扫地 发表于 2019-6-26 14:41:35

本帖最后由 风扫地 于 2019-6-26 14:48 编辑

opposite:

加一句:memset(a2,0,sizeof(char)*SIZE);
或者改一句:

而且i = -1的时候a已经指向本应写0的后面一个字节了,

i指出有效范围时,j也必然同时指出了有效字符串范围


应该是a2= 0;而不是a2=0;

jackz007 发表于 2019-6-26 15:06:20

   不就是把字符串倒一下序吗,楼主把问题复杂化了。
void opposite(char a[])
{
      char c                  ;
      int i , m               ;
      for(i = 0 , m = strlen(a) ; i < m / 2 ; i ++) {
            c = a            ;
            a = a ;
            a = c    ;
      }
      fputs(a , stdout)       ;
}
页: [1]
查看完整版本: strcpy问题