-3

私はCの初心者です。このプログラムで文字列を逆にしようとしていました。何が問題なのですか?

#include<stdio.h>
#include<string.h>

char *reverse(char *);

void main()
{
    char str[]="kundan";
    int len=strlen(str);
    char *ptr;
    ptr=reverse(str);
    printf("the reversed string is :%s",ptr);
}

char *reverse(str)
{
    char *rtr=str;
    char qtr[10];

    for(int i=len-1;i<=0;i--)
    {
        qtr=rtr+i;
        qtr++;
    }
    return qtr;
}
4

1 に答える 1

2

variable を尊重していませんscope。これに関する便利なリファレンスの 1 つは、こちらです。

たとえば、 では、ループ内reverse()で を参照しています。ただし、は で定義されているため、 では使用できません。(これもコンパイルされますか?)lenforlenmainreverse()

返されるreverse()値は、その関数のスコープ内にのみあるスタック値へのポインターです。呼び出し元の関数main()は有効なポインターで終了しますが、ポインターが参照している情報は、reverse()返されるときにスコープ外にドロップされているため、volatileであり、変更される可能性があります。この単純な例では、逆文字列を参照ではなく値で返すことができます。(文字へのポインターではなく、文字の配列を送り返します。)

于 2013-01-24T15:40:46.147 に答える