#include<stdio.h>
/*下のようにやるとうまくいきません*/
void rev_string(const char s[])
{
int i=0,j=0;
char a[2];
while(s[i++])j++;
for(i=0;i<j/2;i++){
a[2]=s;
s=s[j-i-1];
s[j-i-1]=a[2];
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s",str);
rev_string(str);
printf("反転後の文字列は %s です。",str);
}
文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
Re: 文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
(式中で[]演算子(配列添字演算子)に渡された配列はポインタに変換されて処理されます)
したがって、文字列の反転をC言語でポインタを使わずに行うのは無理なので、諦めるか別の言語を使用するといいでしょう。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
C言語では、文字列の処理には必ずポインタが使われます。みうけい さんが書きました:文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
(式中で[]演算子(配列添字演算子)に渡された配列はポインタに変換されて処理されます)
したがって、文字列の反転をC言語でポインタを使わずに行うのは無理なので、諦めるか別の言語を使用するといいでしょう。
オフトピック
そもそもC言語を使うとは一言も書かれていませんが…
みうけい さんが書きました:下のようにやるとうまくいきません
- 書き換えたいデータへのポインタにconstを付けない
- 無駄に配列の範囲外にアクセスしない
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
ご回答ありがとうございます。
実際にためしてみたところ、「assignment of read-only location」とエラーが表示されました。おそらく自分の使っているC言語の環境が悪いと考えられます。今後、他の環境で試してみて、うまくいかなかった場合、再びご質問させていただきます。
ありがとうございました。
実際にためしてみたところ、「assignment of read-only location」とエラーが表示されました。おそらく自分の使っているC言語の環境が悪いと考えられます。今後、他の環境で試してみて、うまくいかなかった場合、再びご質問させていただきます。
ありがとうございました。
Re: 文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
元のコードではそのエラーが出ましたが、修正したコードは動作確認しました。みうけい さんが書きました:実際にためしてみたところ、「assignment of read-only location」とエラーが表示されました。おそらく自分の使っているC言語の環境が悪いと考えられます。
みうけいさんが見ているコードとコンパイラが見ているコードが同じかを確認してください。
・最新のソースコードを正しい位置に保存しましたか?
・本当に意図したソースコード(ファイル)をコンパイルしていますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
すいません。const を消し忘れていました。消した後、うまく動作しました。
本当にありがとうございます。
本当にありがとうございます。
Re: 文字列の反転をポインタを使わずに関数で行いたいのですが、どうすればいいでしょうか。
解決したのなら、解決にチェックを入れて送信しましょう。みうけい さんが書きました:すいません。const を消し忘れていました。消した後、うまく動作しました。
別解