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

两个调整:

代替

printf("%s", *p);

printf("%s", p);

因为printf期待一个指针,而不是一个取消引用的指针,并且

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

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

因为你计算循环中的长度之前的一个字符太多了。因此\0被放置在字符串的开头。

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