0

以下のコードは、次のように呼び出すと機能します。

char arr[] = "foobar";
reverse(arr);

しかし、読み取り専用部分を指しているため、このように呼び出すと機能しません

 char*a = "foobar";
 reverse(a);

今私の質問は、ユーザーがこのように電話をかけないようにする方法はありますか?

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

}

4

3 に答える 3

2
于 2013-04-13T15:43:47.537 に答える
0

を使用しstd::stringます。astd::stringは、既知のサイズのメモリの連続ブロックです。

を使用することもできますstd::reverse

char*正しい設定に加えて、コンパイラは文字列リテラルを変数に割り当てることを防ぎます。

于 2013-04-13T15:55:18.480 に答える
0

いいえ、関数に渡されるポインターが有効であることを保証する方法はありません。有効なデータを提供することは、呼び出し元の印象に残ります。このようなこともできます

  int i = 0xABCD;
  reverse((char*) i);

これはあまり意味がありませんが、そのようなことを逆にチェックする方法はありません。

于 2013-04-13T15:44:31.283 に答える