ベストアンサー strcmpの返り値 2009/07/04 20:38 strcmpを実行したのですが、比較した値は、同じ値なのですが、返り値が"2"です。結果が"2"になることはありますか?どのような意味でしょうか? みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー hogehoge78 ベストアンサー率80% (433/539) 2009/07/04 21:53 回答No.1 strcmpは、 最初の引数が、第二引数よりも何文字多いかを戻り値とするようです。 http://php.benscom.com/manual/ja/function.strcmp.php 戻り値が"2"なのであれば、第二引数が半角2文字分(2バイト分)少ないということになります。 文字列中に改行、タブ、スペースなど入っていないかチェックして下さい。 マルチバイト文字(全角)をご利用であれば文字のエンコードは同一のものかも確認されたほうが良いです。 質問者 お礼 2009/07/04 22:18 ありがとうございました。<m(__)m> 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) cobe ベストアンサー率23% (54/227) 2009/07/04 21:56 回答No.2 マニュアル上は0と正と負を返すと言うので、2を返しても仕様通りですし、正負で判定するのであれば、不自由はしないでしょう。 ただ、2となるケースはみたことないですね。 再現するコード(1行で済むはず)を載せればすぐに解決すると思いますよ。 質問者 補足 2009/07/04 22:20 回答ありがとうございます。 CR LFが付いたまま比較していたようです。 再現するコードを載せるとはどういう意味でしょうか? 比較する文字列2つと、返り値はPRINTで表示して、 テストをしました。ところで、インターネットエクスプローラでは、 CR LFは表示できるのでしょうか? 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発PHP 関連するQ&A if( strcmp( 引数, 引数 )=== 0 サンプルで、 if( strcmp( 第1引数, 第2引数 ) === 0 ){ て書いてあるコードを見たのですが、 この === 0 には、どういう意味があるのでしょうか? (==0とはどう違うのでしょうか? という意味です) 試しに、型の一致を確認できるのかな? と思いやってみたのですが、 うまくいきませんでした。 $a = "10"; $b = 10; if( strcmp( $a, $b ) === 0 ){ print "2つの文字列は同じです!"; } else { print "2つの文字列は違います"; } strrposの返り値判定に「===」を使うのだったら、 意味は分かるのですが、 それとは意味合いが違うような (strcmpに===を使う意味はないような)気もするのですが… PHPのstrcmp関数について PHPのstrcmp関数の動きがよくわかりません。 strcmp (PHP 4, PHP 5) strcmp — バイナリセーフな文字列比較 説明 int strcmp ( string $str1 , string $str2 ) この比較は大文字小文字を区別することに注意してください。 パラメータ str1 最初の文字列。 str2 次の文字列。 返り値 str1 が str2 よりも小さければ < 0 を、str1が str2よりも大きければ > 0 を、 等しければ 0 を返します。 ・・・・・・・・・とマニュアルには上記のようにあります。 聞きたい事!▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 1 このstr1がstr2より大きいとはどういうことでしょうか? 2 実際に動きを確認するためにstrcmp関数を他のPHPのビルトイン関数で実現できないのでしょうか? 私の想像では、この関数にあたえる二つの引数を10進数に変換して、値の大きさを比較するという方法なのですが・・。 たとえば <?php $str01 = "a"; $str02 = "b"; print strcmp($str01,$str02); print "<br />"; //上記の値は-1がでるためこの場合 $aのほうが$bより小さいことになる。 //$aの値の文字aが小さいとは?どういうことか //私の、ぱっと思いついた方法は、以下のような意味? $str01 = bin2hex($str01); print $str01 ; //16進数でaという値を表すと61がでる print "<br />"; $str01 = hexdec($str01); print $str01; //10進数でaという値を表すと97がでる print "<br />"; //上記を同じく$bに行うと $str02 = bin2hex($str02); print $str02 ; //16進数でaという値を表すと62がでる print "<br />"; $str02 = hexdec($str02); print $str02; //10進数でaという値を表すと98がでる print "<br />"; print "<hr />"; /* 結果、$aは$bより 【小さい】という事なのでstrcmpは-1を返したと・・・。 こういう事をかんがえてみました。 そしてこれは、普通に考えれば a => bという順序なので アルファベット順になります。 しかしこのやり方だと */ $str03 = "aaaaaaa"; $str04 = "bb"; //と上記のような文字列があった場合同じく同じ手順で値をだすと $str03 = bin2hex($str03); print $str03 ; //16進数でaという値を表すと61616161616161がでる print "<br />"; $str03 = hexdec($str03); print $str03; //10進数でaという値を表すと27410143614427489がでる print "<br />"; //上記を同じく$bに行うと $str04 = bin2hex($str04); print $str04 ; //16進数でaという値を表すと6262がでる print "<br />"; $str04 = hexdec($str04); print $str04; //10進数でaという値を表すと25186がでる print "<br />"; /*ただ上記の方法だと、$str03と$str04を比較すると$str04の【bb】という値の方が 小さくなり順序的には bb => aaaaaaとなりアルファベット順にするとこができない。 三つ目の質問 3 アルファベット順にソートしたいとき標準のsort関数を使わずに他のPHPの標準関数の組み合わせでアルファベット順に並び替える 関数はつくれないのか? どなたか、ご意見お聞かせください。 よろしくお願いします。 strcmpでIP比較 お世話になります PHPのstrcmp()を使ってIPアドレスの比較をしているのですが、全く同じIPアドレスなのに0を返してくれません。 何故でしょうか? echo strcmp(999.99.999.999,999.99.999.999); -1が返ってきます。 宜しくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム strcmp( )関数について教えて下さい 今日は、Cの初心者です、宜しくお願いします。 a,bが一文字のとき、「if(strcmp(a,b)==0)」では、a,bの大小は辞書に出てくる順序を返すとありますが、 a="abcde",b="xyz"として「if(strcmp(a,b)==0)」とかくと、これは文字の長さを比較するのでしょうか。 それとも先頭文字のについて、辞書に出てくる順序の大小を返すのでしょうか。 本を読むと単に「比較する」とだけしか書いてないのですが、一体「文字」又は「文字列」の何を比較するのでしょう。 「辞書に出てくる順序」なのでしょうか、それとも「長さ」なのでしょうか。 一方が文字列(p="xyz")でもう一方が一文字(q)で「if(strcmp(p,q)==0)」のときは何を比較するのでしょうか。 宜しくお願いします。 返り値と引数が知りたいのですが。 クラスCFileのメンバー関数の機能でOPENとREADの返り値と引数が知りたいのですが。 自分でも調べたんですが。 READの返り値はUINTで引数はvoid* pBufferとUINT nCountであってるでしょうか? OPENの返り値はBOOLでいいのでしょうか?引数がわかりませんでした。 それと機能の意味なんですがOPENはファイルを開く以外にも意味はあるのでしょうか。 よろしくお願いします。 VBA dictionary getkeys返り値 エクセルVBAの話です。 dictionaryオブジェクトのgetkeysメソッドを、 keyが1つも登録されていないときに使ったときに、 返り値をウォッチウィンドウで見ると、 型「Variant/Variant(0 to -1)」 その中身の値「<変数なし>」 と表示されています。 この返り値の挙動が、 プログラムを組む上で便利なので、 自作の関数でも、 同じような返り値を返したいのですが、 どのように値を代入するといいのでしょうか? 「戻り値」ですか?「返り値」ですか? 例えば Sub test1() MsgBox WorksheetFunction.Sum(Range("a1:a3")) End Sub でMsgBoxに表示される値の事は、「戻り値」ですか?「返り値」ですか? いまいちプログラミング用語がわからないので教えて下さい。 よろしくお願い致します。 Javaアプリケーション実行の返り値を取る方法 コマンドラインからJavaアプリケーションを実行させて、 成功/失敗の返り値を取りたいのですが。 普通に実行するとmain()を動かすわけですから返り値はvoidで不可能ですよね。 コマンドラインからmain()以外のメソッドを呼び出すとかって可能でしょうか? そのほか何か方法はありますか? ちなみに、batファイルで返り値を判断して、処理を行いたいのですが。 ご存知の方教えてください。よろしくお願いします。 setTimeは、返り値がなぜ不要なのでしょうか? ・Dateオブジェクトを見ているのですが、setTimeメソッドが理解できません ・getTimeメソッドだと、「返り値」を受け取れるのに、 setTimeメソッドでは、なぜ「返り値」を受け取れないのでしょうか? ・メソッド名に「set」「get」が付いているので、てっきりセッターゲッターみたいな物だと思ったのですが… ・直接プロパティ値を書き換えるのでしょうか? 参照みたいに ・マニュアルを見たら、「インスタンスを生成した関数を返します。これはデフォルトでは Date コンストラクタです」と書かれているのですが、これはどういう意味なのでしょうか? ・コンストラクタなのに、プロパティ? インスタンスを生成した関数? >このプロパティの値は関数そのものの参照であり、関数の名前を含んだ文字列ではないことに注意してください ・関数そのものの参照って何ですか? ・Dateオブジェクトの実体はどこに存在しているのでしょうか? ▽Date - JavaScript | MDN https://developer.mozilla.org/ja/docs/JavaScript/Reference/Global_Objects/Date SQLで返り値が空とでる SQLで 「返り値(戻り値?)が空」とでる。 Windows7ー64BitでXAMPPの最新バージョンの1.8.1を使ってます。 MyAdminでinsertなどのSQL文を直接実行してできてたのですが、 DreamWeaverでPHPとSQL構築してブラウザで実施してもデータベースに反映されません。 その後再度MyAdminで直接しても反映されなくなりました。 上記のように返り値が空とでてきます。 どのような原因があるか教えいただけますでしょうか。 strcmp( finddata.cFileName, "." ) http://www.ne.jp/asahi/oh/landd/prog_html/prog23.html 上記のサイトに strcat( dir_cpy, "\\*" ); search = FindFirstFile( dir_cpy, &finddata ); if( search != INVALID_HANDLE_VALUE ){ // 現在のディレクトリ(フォルダ)と親ディレクトリは排除 if( strcmp( finddata.cFileName, ".." ) != 0 && strcmp( finddata.cFileName, "." ) != 0 ){ ……… } while( FindNextFile( search, &finddata ) != 0 ){ このような意味のソースが有りますが、コメントの行位置では finddata.cFileName が "." 以外になったことがありません。 そのため、いつも if は偽で、 ……… の部分が実行されません。 どういう場合に ……… の部分の処理がされるんですか? 戻り値と返り値の違い タイトルの通りの質問内容です。 僕が調べた限りは「同じ」と言う意見が多数でした。 中には ・参照渡しした引数の関数通過後の結果が戻り値、 関数自体が返すのが返り値 とか ・引数なしの関数で戻るのが戻り値、引数ありの関数で 戻るのが返り値 とかはたまたその逆とか、混沌としています。 気になります。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム Excel 関数返り値を「値」に Excel の関数の返り値そのものを数値に置き換える関数はないのでしょうか。 たとえば、=VLOOKUP()でみているセル値をそのまま「値」に置き換える。 (LOOKUPの対象が変わっても、前の値を保持するため)など 関数がドグサければマクロでも。 教えて下さい。よろしくお願いします。 VLOOKUPの返り値を固定するには… 現在、毎日の売上表のようなものを作ろうと思っています。 表は、次のようになります。 A1…日付、B…氏名、C…売上 が入っています。 その下(別シートでも可)に、縦に氏名、横に日付(11/1~11/30)の表を作成して A1の日付の売上(C)を、合致する日付の列にVLOOKUPで返します。 その場合、A1の日付とC(売上)を、毎日変更して反映させたいんですが、前日の データが消えてしまい、困っております。 毎日、返り値をコピーして値にして貼り付ければいいのでしょうが、返り値を固定 もしくは、値で返るような方法があれば…と思い、質問させていただきます。 以上、よろしくお願いいたします。 アクセス DCountの返り値が必ず0になる DCountの返り値が必ず0になってしまうのです。 該当のフィールドには値は入っています。 しかし Sub test() Dim ColName As String ColName = "あああ" Debug.Print DCount("[" & ColName & "]", "test", "[" & ColName & "] = '" & ColName & "'") End Sub をすると、どんなに値がはいっていても0になってしまいます。 フィールドの型はテキスト型です。 C言語:関数の返り値と引数について C言語:関数の返り値と引数について C言語の関数を作るとき、ほしい値とかを引数にして渡す場合と、そのまま返り値で渡す場合の二種類がありますよね? 例えば、 ・void Smooth( Image *src, Image *dst, int param ); ・Image *Smooth( Image *src, int param ); みたいな感じで mallocとかは返り値で渡してますけど、opencvの関数(例えばcvSmooth)とかは引数にしてます これって使い分けとかあるんでしょうか? C言語 strcmp 半角スペースがあるとだめ? C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!"; //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; } strcmp 超C言語初心者です。strcmpを使わずに文字列を比較する文を書いているのですが、途中でわからなくなりました。 宜しければご指摘お願いします。 #include<stdio.h> int main(){ char cp1[100],char2[100]; int i=0; int j=0 printf("1つ目の文字列:\n"); scanf("%s\n",cp1); printf("2つ目の文字列:\n"); scanf("%s\n",cp2); while(cp1[i]=='\0' || cp2[j]=='\0'||cp1[i]==cp2[j]=='\0'){ cp1[i++]; cp2[j++]; } if(cp[i]==cp2[j]=='\0'){ printf("同じ文字数\n); }else if (cp1[i]=='\0'&&cp2[j]!='\0'){ printf("2つ目の方が大きい\n); }else if (cp2[j]=='\0'&&cp1[i]!='\0'){ printf("1つ目の方が大きい\n); } exit(0); } と今書いています。間違いだらけでしょうが、お願いします!! SQLで 「返り値(戻り値?)が空」とでる。 SQLで 「返り値(戻り値?)が空」とでる。 Windows7ー64BitでXAMPPの最新バージョンの1.8.1を使ってます。 MyAdminでinsertなどのSQL文を直接実行してできてたのですが、 DreamWeaverでPHPとSQL構築してブラウザで実施してもデータベースに反映されません。 その後再度MyAdminで直接しても反映されなくなりました。 上記のように返り値が空とでてきます。 どのような原因があるか教えいただけますでしょうか。 ※幅広いご回答募集のため、他の質問サイトでも同じ質問させていただきます。 C言語 if分岐 strcmp 失礼します。現在test_wordに格納されている文字列を数字の0又は空白だった場合の条件を記述していきたいのですが、うまくいきません。 最初の条件で0又は空白ではない場合を記述し else ifで0又は空白の場合を記述しています。 ステップ実行して確認しているのですが、 test_wordに0又は空白が入っているのに一番最初の処理をしてしまいます。 ご教授頂きたいです。よろしくお願いします。 char blank_word[10]; char miss_word[10]; strcpy(blank_word, ""); strcpy(miss_word,"0"); if ((strcmp(test_word, blank_word) != 0) || (strcmp(test_word,miss_word) != 0)) { 0又は空白ではないの処理; } else if (strcmp(test_word, blank_word) == 0 || strcmp(test_word, miss_word) == 0 && flag == 1) { 0又は空白である場合の処理; } 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ありがとうございました。<m(__)m>