改变内存中的值不是工作指针

时间:2013-07-13 17:04:08

标签: c pointers

#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()函数以反转输入的单词,即("abcd" -> "dcba"),但是我在使用指针时遇到了一些困难。

我无法更改内存中char *word所持有的值。

1 个答案:

答案 0 :(得分:3)

您尚未为word分配任何存储空间。变化

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

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

reverse

还存在许多问题
  • 它的签名接受一个字符串数组而不是一个字符串(一个字符数组)。
  • 您需要使用strlen来计算字符串的长度。 sizeof会告诉您平台上char**的大小。
  • 您将字符串反转两次,以便当前将其反转,然后恢复原始订单。
  • 您的反向算法将包括反转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;
    }
}