C 反向字符串数组

C 反向字符串数组,c,arrays,string,C,Arrays,String,我正在尝试反转一个字符数组,并将其放置在一个新数组中。它似乎没有返回任何东西。这是下面的代码,我不知道是什么错了。有什么建议吗?(没有双关语) void getReverse(char dest[],char src[] { int i; int j=0; int length=strlen(src); printf(“%d\n”,长度); 对于(i=length-1;i>=0;i--,j++) //对于(j=0;jbugs: 正如@Bill所说,j++在getReverse()的循环中执行两次

我正在尝试反转一个字符数组,并将其放置在一个新数组中。它似乎没有返回任何东西。这是下面的代码,我不知道是什么错了。有什么建议吗?(没有双关语)

void getReverse(char dest[],char src[]
{
int i;
int j=0;
int length=strlen(src);
printf(“%d\n”,长度);
对于(i=length-1;i>=0;i--,j++)
//对于(j=0;jbugs:

  • 正如@Bill所说,j++在getReverse()的循环中执行两次

  • getReverse()中的putchar(j)将导致输出混乱,因为j非常小,它们可能是不可打印的字符。如果确实要监视j的值,请使用printf(“%d\n”,j)

  • 正如@jarmod所说,您在src[]中缺少一个“\0”。您应该在while()循环之后和main()中的getReverse()之前添加“src[count]=”\0“;”

  • <> P>另外,如果*Src和*DEST指向同一个地址,您的GETRESSER()不能工作。ALTHOGH您已经声明了函数“反转一个字符数组并把它放在一个新的数组中”,但是在编写一个更常见的函数时要考虑这一点。

    Bug:

  • 正如@Bill所说,j++在getReverse()的循环中执行两次

  • getReverse()中的putchar(j)将导致输出混乱,因为j非常小,它们可能是不可打印的字符。如果确实要监视j的值,请使用printf(“%d\n”,j)

  • 正如@jarmod所说,您在src[]中缺少一个“\0”。您应该在while()循环之后和main()中的getReverse()之前添加“src[count]=”\0“;”


  • <> P>另外,如果*Src和*DeST指向同一个地址,您的GETRESSER()不能工作。ALTHOGH您已经声明了函数“反转一个字符数组并把它放在一个新的数组中”,但是在编写一个更常见的函数时要考虑这个问题。

    < P>我只是修改了一些代码并运行它。
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    #define MAX_SIZE 30
    
    void getReverse(char dest[], char src[])
    {
        int i;
        int j=0;
        int length = strlen(src);
        printf("%d\n", length);
    
        for(i=length-1; i>=0; i--, j++)
        //for(j=0; j<length; j++)
        {
            dest[j]=src[i];
            //putchar(j);
            //j++;
        }
        dest[j] = '\0';
    }
    
    main()
    {
        char dest[MAX_SIZE];
        char src[MAX_SIZE];
        int i = 0;
        int count;
        int c = getchar();
    
        count = 0;
    
        memset(src, 0, MAX_SIZE);
    
        while ((count < MAX_SIZE - 1) && c != EOF)
        {
            src[count] = c;
            ++count;
            //putchar(c);
            c = getchar();  
    
        }
    
        printf("src=%s\n", src);
    
        getReverse(dest, src);
        printf("dest=%s\n", dest);     
    }
    
    abcdefghijk
    src=abcdefghijk
    11
    dest=kjihgfedcba
    

    我只是修改一些代码并运行它

    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    #define MAX_SIZE 30
    
    void getReverse(char dest[], char src[])
    {
        int i;
        int j=0;
        int length = strlen(src);
        printf("%d\n", length);
    
        for(i=length-1; i>=0; i--, j++)
        //for(j=0; j<length; j++)
        {
            dest[j]=src[i];
            //putchar(j);
            //j++;
        }
        dest[j] = '\0';
    }
    
    main()
    {
        char dest[MAX_SIZE];
        char src[MAX_SIZE];
        int i = 0;
        int count;
        int c = getchar();
    
        count = 0;
    
        memset(src, 0, MAX_SIZE);
    
        while ((count < MAX_SIZE - 1) && c != EOF)
        {
            src[count] = c;
            ++count;
            //putchar(c);
            c = getchar();  
    
        }
    
        printf("src=%s\n", src);
    
        getReverse(dest, src);
        printf("dest=%s\n", dest);     
    }
    
    abcdefghijk
    src=abcdefghijk
    11
    dest=kjihgfedcba
    

    这里j的值增加了两倍

    for(i=length-1; i>=0; i--, **j++**)
            //for(j=0; j<length; j++)
            {
                dest[j]=src[i];
                putchar(j);
                **j++**;
            }
            dest[j] = '\0';
    }
    
    for(i=length-1;i>=0;i--,**j++**)
    
    //对于(j=0;j这里j的值增加了两倍

    for(i=length-1; i>=0; i--, **j++**)
            //for(j=0; j<length; j++)
            {
                dest[j]=src[i];
                putchar(j);
                **j++**;
            }
            dest[j] = '\0';
    }
    
    for(i=length-1;i>=0;i--,**j++**)
    //对于(j=0;j
    #包括
    #包括
    void getReverse(char dest[],char src[]
    {
    int i;
    int j=0;
    int length=strlen(src);
    printf(“%d\n”,长度);
    对于(i=length-1;i>=0;i--,j++)
    //对于(j=0;j&&
    如果(c=='\n'){
    src[count]='\0';
    打破
    }
    src[count]=c;
    ++计数;
    //普查尔(c);
    c=getchar();
    }
    getReverse(目的地、src);
    printf(“%s”,dest);
    返回0;
    }
    
    #包括
    #包括
    void getReverse(char dest[],char src[]
    {
    int i;
    int j=0;
    int length=strlen(src);
    printf(“%d\n”,长度);
    对于(i=length-1;i>=0;i--,j++)
    //对于(j=0;j&&
    如果(c=='\n'){
    src[count]='\0';
    打破
    }
    src[count]=c;
    ++计数;
    //普查尔(c);
    c=getchar();
    }
    getReverse(目的地、src);
    printf(“%s”,dest);
    返回0;
    }
    
    remove
    j++
    从循环内部删除,您将它放在
    for
    中,您无法保证src[]以零终止符结尾,因此您的reverse函数调用strlen()将产生不可预测的结果。此外,我会将getReverse()重命名为reverse()或类似的名称,因为该函数没有“获取”任何内容(它不返回值)。从循环内部移除
    j++
    ,它就在
    for
    中,因为你没有保证src[]以零终止符结尾,所以你的reverse函数调用strlen()将产生不可预知的结果。另外,我将getReverse()重命名为reverse()或者类似,因为函数不“获取”任何内容(它不返回值)。