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()関数に渡して、入力された単語を逆にしようとしていますが("abcd" -> "dcba")、ポインターの使用に問題があります。

char *wordがメモリに保持している値を変更できません。

4

1 に答える 1

3

のストレージが割り当てられていませんword。変化する

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

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

などの問題も数多くありますreverse

  • その署名は、単一の文字列 (文字の配列) ではなく、文字列の配列を受け入れます。
  • strlen文字列の長さを計算する ために使用する必要があります。sizeofプラットフォーム上の のサイズを示しchar**ます。
  • 文字列を 2 回反転するため、現在は反転してから元の順序に戻します。
  • 逆アルゴリズムには、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 に答える