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 回実行されます。

  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

ここで、j の値は 2 回インクリメントされます。

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 に答える
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 に答える