1

ポインターを使用して char 配列を逆にしたいのですがprintf、ポインターがnull. 何が間違っているのか、それを修正する方法がわかりません。では、どうすれば同様の方法で文字列を逆にすることができますか?

#include <stdio.h>

void reverse(char *cstr);

int main()
{
    char a[100];
    char *p = a;
    printf("geef een string ");     // ask user to write a word
    scanf("%s", &a);

    reverse(p);

    printf("%s", *p);
}


void reverse(char *p)
{
    int i = 0;
    char temp;
    int lengte;

    for(i = 0; *(p+i) != '\0'; i++)
    {
        lengte++;                        // length of char array without the '\0'
    }

    for(i = 0; i < lengte; i++)
    {
        temp = p[i];               // something goes wrong here but I don't know  what
        p[i] = p[lengte-i];
        p[lengte-i] = tem;
    }
}

で何かがうまくいかない

p[i] = p[lengte-i];
p[lengte-i] = tem;

部。何に変更する必要がありますか?

4

1 に答える 1

1

2 つの調整:

交換

printf("%s", *p);

printf("%s", p);

printf逆参照されたポインターではなく、ポインターを期待しているため、および

for(i = 0; i < lengte; i++)

for(i = 0; i < lengte--; i++)

その前のループでの長さを数えると、1文字が多すぎるためです。したがって、\0は文字列の先頭に配置されます。

$ gcc test.c && ./a.out
geef een string 1234
4231$
于 2013-11-06T22:17:51.117 に答える