0

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

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;

    while ((count < MAX_SIZE) || (c != EOF))
    {
        src[count] = c;
        ++count;
        //putchar(c);
        c = getchar();  

    }

    getReverse(dest, src);
    printf("%s", dest);     
}
4

4 回答 4

2

错误:

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

  2. getReverse() 中的 putchar(j) 会导致输出混乱,因为 j 很小,它们可能是不可打印的字符。如果你真的想监控 j 的值,使用 printf("%d\n",j);

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

此外,如果 *src 和 *dest 指向同一个地址,您的 getReverse() 将无法工作。尽管您已声明该函数“反转字符数组并将其放入新数组”,但当您考虑这一点时写一个更常用的函数。

于 2013-05-23T01:36:01.887 回答
1

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

#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
于 2013-05-23T01:52:44.533 回答
0
#include <stdio.h>
#include <string.h>

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(dest[j]);
            //j++;//duplicate , `for` after expression
        }
        dest[j] = '\0';
}

#define MAX_SIZE 32

int main(void){
    char dest[MAX_SIZE];
    char src[MAX_SIZE];
    //int i = 0;//unused
    int count;
    int c = getchar();

    count = 0;

    while ((count < MAX_SIZE) && (c != EOF))//|| -> &&
        if(c == '\n'){
            src[count] = '\0';
            break;
        }
        src[count] = c;
        ++count;
        //putchar(c);
        c = getchar();  

    }

    getReverse(dest, src);
    printf("%s", dest);
    return 0;
}
于 2013-05-23T10:05:50.153 回答
0

这里 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';
}

这可能是问题所在。

于 2013-05-23T03:54:19.413 回答