0
#include <stdio.h>
#include <string.h>
void reverse(char * str[]) {
    int i;
    int reverse = sizeof(str);

    for(i=0;i<=sizeof(str);i++){
        *str[i]=*str[reverse];
        reverse--;
    }
}

main() {
        char *word;

        printf("Enter a word please=>");
        scanf("%s",word);

        reverse(word);      
        printf("%s",word);
}

我正在尝试获取字符串输入并将其传递给reverse()函数以反转输入的单词 ie ("abcd" -> "dcba"),但是我在使用指针时遇到了一些困难。

我无法更改char *word内存中保存的值。

4

1 回答 1

3

您尚未为word. 改变

char *word;
scanf("%s",word);

char word[20];
scanf("%19s",word);

也有很多问题reverse

  • 它的签名接受字符串数组而不是单个字符串(字符数组)。
  • 你需要用来strlen计算一个字符串的长度。 sizeof告诉char**您平台上 a 的大小。
  • 您将字符串反转两次,因此当前将反转它然后恢复原始顺序。
  • 您的反向算法将包括反转 nul 终止符。这通常不会被视为字符串的一部分,需要留在数组的末尾以标记字符串的结尾。

以下(未经测试的)功能应该更接近您想要的

void reverse(char* str) {
    int i;
    int len = strlen(str);
    for (int i=0; i<len/2; i++) {
        char tmp = str[i];
        str[i] = str[len-i-1];
        str[len-i-1] = tmp;
    }
}
于 2013-07-13T17:05:36.077 回答