0

重複の可能性:
文字列への書き込み時にセグメンテーション違反が発生するのはなぜですか?

ポインタがあり、両方の文字のインデックスがわかっている場合、文字をどのように交換しますか(実際には配列を割り当てませんでした)

すなわち

char *str = "hello"そして、私は知っていて、インデックス0と4である「h」と「o」を交換してから、ポインタも返したいと思っていました。

私はの慣習を行うことに慣れています

temp = array[i];
array[i] = array[j];
array[j] = temp;
4

4 に答える 4

3

ええと、文字列リテラルへのポインタを使うことはできません。リテラルは不変です。あなたがいつもそれをした方法に固執してください。

于 2012-10-13T15:56:17.983 に答える
1

次の宣言:

char *str = "hello";

安全でない行動について警告するために、そうする必要があります。

const char *str = "hello";

文字列リテラルを変更しようとするのはC標準によると未定義の動作であるため、配列を使用する必要があります。

char str[] = "hello";

次に、配列の要素を交換するのは簡単で安全です。

char tmp = str[0];
str[0] = str[4];
str[4] = tmp;
于 2012-10-13T17:11:57.683 に答える
1
temp = array[i];
array[i] = array[j];
array[j] = temp;
于 2012-10-13T15:55:34.170 に答える
0

一部のオペレーティングシステム/コンパイラでは、主にAIX5.1などの文字列リテラルを変更できます。

コード内の文字列リテラルを変更する場合、Linux用にコンパイルするためにコードを書き直す必要があるため、コードをクロスプラットフォームにするのは面倒です。

于 2012-10-14T22:06:33.887 に答える