• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラミング ポインタを使った文字列比較)

プログラミングでポインタを使った文字列比較

このQ&Aのポイント
  • プログラミングでポインタを使用して文字列を比較する方法について説明します。
  • 与えられた2つの文字列が等しい場合、0を返し、等しくない場合は1を返す関数str_compareを作成します。
  • しかし、プログラムを実行すると、文字化けが発生し、正しく機能しません。この問題の原因と解決方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>printf("input str1 = %s", str1); str1を出力することは不要です。"input str1 = " だけでじゅうぶん。 >printf("input str2 = %s", str2); 上に同じ。 >str_compare(str1, str2); この行は不要です。 >ポインタと間接演算子*を用いた処理を行うこと。 この条件を満たしていないのでは?

tksmsysh
質問者

お礼

ご回答ありがとうございます。 >>>ポインタと間接演算子*を用いた処理を行うこと。 >>この条件を満たしていないのでは? 確かに、添え字を使って誤魔化していますね… 以下のように、str_compare関数の中身だけ変更しました。これでOKですか? int str_compare(char *s1, char *s2) { while (*s1 == *s2){ if (*s1 == '\0') return 0; s1++; s2++; } return 1; }

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

「ポインタと間接演算子*を用いた処理を行うこと」という条件だけなら, s1[i] とか s2[i] とかを *(s1+i) とか *(s2+i) とかに直せば OKですね>#2. あるいは「s1[i] というのは規格上 *(s1+i) と等価であり, 明示的にではないが間接演算子をつかっている」と言い張ってみるのもいいかもしれません.

tksmsysh
質問者

お礼

ご回答ありがとうございます。勉強になりました。

回答No.3

> printf("input str1 = %s", str1); > scanf("%s", str1); > printf("input str2 = %s", str2); > scanf("%s", str2); と、scanfで値を入力する前にprintfで表示させているからですよ。 そもそも、scanfで取得しようとしているstr1やstr2を取得する前に 表示させる必要はないので、プログラムはこんなふうに書けばよいでしょう。 printf("input str1 = "); scanf("%s", str1); printf("input str2 = "); scanf("%s", str2);

tksmsysh
質問者

お礼

仰る通りですね。以後このようなミスをせぬよう気をつけます。 ご回答ありがとうございます。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

文字列初期化してない所為です。 イキナリ、宣言してその中身見たら、不定値です。(コンパイラ等にも拠りますけど) 以下ですね >char str1[MAX], str2[MAX]; > >printf("input str1 = %s", str1); >scanf("%s", str1); >printf("input str2 = %s", str2); >scanf("%s", str2); 普通は、宣言後必ず使う前にmemsetとかで0(NULL)をセットします。 memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2));

tksmsysh
質問者

お礼

完全に凡ミスでした。こんな簡単なことに気がつかなかったとは…。 ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう