0
#include <iostream>
#include <string>

void reverse(char*);

void reverse(char* str) 
{
    char * end = str;
    char tmp; 
    if (str) {
        while (*end) {
            ++end;
        }
     }
     --end;
     while (str < end) {
         tmp = *str;
         *str++ = *end;
         *end-- = tmp;
     }
}

int main {
   char * string;
   string = "Hello";
   reverse(string);
   std::cout << string;
   return 0; 
}

こんにちは。この単純な関数をテストしようとしていますが、変数文字列を char ポインターとして宣言する行で「'char' の前に一次式が必要です」というエラーが表示されます。私が初心者であり、おそらく追加のエラーを犯していることをお許しください。ご協力いただきありがとうございます!

4

1 に答える 1

1

main の引数リストを忘れました。これには 2 つの許容値があります。

int main(void)  // Option 1
{
    // The 'void' is optional; in C++, it's equivalent to "int main()", but there
    // is a difference in plain C
    ...
}

// OR

int main(int argc, char *argv[])  // Option 2
{
    // The names of the variables argc and argv can of course be changed; argv
    // can also be declared as char**
    ...
}

また、like のような文字列リテラルは"Hello"変更できないという意味上の問題もあります。const char[]からへの非推奨の変換がありますが、これはchar*避けるべきであり、警告を有効にした場合、コンパイラはそれについて警告するはずです。コードを実行しようとすると、セグメンテーション違反またはアクセス違反が発生します。

stringこれを修正するには、変数をポインターではなく、変更可能な配列として宣言する必要があります。

char string[] = "Hello";
于 2013-04-12T21:54:23.400 に答える