• ベストアンサー

コンパイラの違いについて

charmer29-2の回答

  • ベストアンサー
回答No.4

既に#1さんが回答していますが改めて。 strcmp()の戻り値が-1になることを期待してはいけません。 つまり、 if(strcmp(name,sub_name) == -1){ ではなく if(strcmp(name,sub_name) < 0){ と書けばよい、ということです。 逆の場合も同様に、1と比較せずに0との大小で判断すればよいのです。

yuki22
質問者

お礼

お返事ありがとうございます。 なるほどです。う~ん、どうやら理解力が足りなかったみたいではずかしいです・・。 私にもわかるくらいにレベルを落としていただいてありがとうございます^^

関連するQ&A

  • コンパイル環境の違いによる、浮動少数点の違い

    不動少数(float)を使った、c言語の演算プログラムを作っています。 Aマシン(CentOS5, gcc3.4)でコンパイルした、"test_a.so"と"test_a.a"について、 Aマシンで実行した結果、両者の結果は一致します。 Bマシン(Fedora5, gcc3.0)でコンパイルした、"test_b.so"と"test_b.a"について、 Bマシンで実行した結果、両者の結果は一致します。 Aマシンで実行した結果、両者の結果が異なります。 結果の比較をすると、以下のようになります。 "test_a.so"=="test_a.a"!="test_b.so"!="test_b.a" (1)コンパイル環境と実行環境が違うと、浮動少数の演算に違いがでることがありますか? (2)コンパイル環境と実行環境が違うと、so と aに違いがでることがありますか? 上記2点について、ご存知の方いらっしゃいましたら教えてください。 お願い致します。

  • コンパイル ./aと./a.out の違い

    ほんとにcの初心者なのですが、 今Tera Termを使って、ソースを書いて、コンパイル、実行をしているのですが、 例えばtest.cというファイルを gcc test.c とやってコンパイルして、 a.outというファイルができます。 それを./aとやれば実行できると聞いてやってみたのですができません。 ./a.outはできるのですが なぜなのでしょうか??

  • フリーのCコンパイラに関して

    今、ボーランドのCコンパイラを使用しているのですが、ボタンに一つでコンパイルして実行するのではなくて、コマンドプロントで、これから行う作業を入力して、 実行することは出来ますか? 他のフリーソフトで出来るものがあれば教えて下さい。

  • フリーのコンパイラを探しています

    PC上で動作するフリー(若しくは無償で手に入れば期間限定版でも良いです)のCコンパイラ(C++もあれば尚可)を探しています。 目的は、あるサイトから取得した暗号化を行うソースをコンパイル&実行する為です。しかしながら、そのソースはかなり前にPC-98(NEC)で Turbo Cで確認したもので、int型が2バイトであることを前提にしています。試しにBorlandのコンパイラ(BCC32)でコンパイル&実行してもこちらの期待した結果は得られませんでした。(int型をshort型に変更しコンパイルしてもだめでした) 上記の条件にあてはまるものでLSC-Cがありますが、LSC-Cでコンパイルするとメモリ不足となり、コンパイルが異常終了してしまいます。 int型を2バイトとして扱うことのできるコンパイラをLSC-C以外にご存じでしたら教えていただけませんでしょうか。

  • C90とC99の計算結果の違い?

    C言語の質問です。 gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12) 以下のプログラムをgccでコンパイル・実行すると(1)に入り,"a"が出力されます。unsigned intの計算なのでラップアラウンドが生じtest=4294716272となるのは私の期待どおりです。 ただ、gcc -std=c99でコンパイル・実行すると(2)に入り,"b"が出力されました。c99でコンパイル・実行すると計算結果がなぜ異なっているのかが分かりません。 long test = 0; unsigned int x = 184; unsigned int y = 251208; test = (x-y); if(test == 4294716272){ printf("a");// (1) }else if(test == -251024){ printf("b"); // (2) }

  • コンパイラが見つかりません。

    いつも教えて頂きありがとうございます。 C#の勉強を始めました。 コードは下記の通りです。 using System; class Data{ public static void main() { int a; int b; a=2; b=3; a=b; Console.WriteLine(a); } } このコードに間違いないのですが 検索してもどうやってコンパイル(実行) するのか分りません。 ご回答の程、宜しくお願い申し上げます。

  • コンパイラーの不具合?

    AIX(5.3)の環境でプログラムソースをコンパイルし実行したところ、 コンパイラーのバージョンの違いによる、挙動の違いを発見しました。 これは、コンパイラーの不具合なのでしょうか? コンパイラーのバージョンは、vacpp 6.0とvacpp 9.0です。 サンプルソースコードと実行結果は以下の通りです <sample.c> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> int aaa( char * a, char *b,char *c,... ) { va_list arglist; char *temp; printf("1.a=%x\n",&a); printf("2.b=%x\n",&b); printf("----------------------\n"); va_start( arglist, a ); printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist); for( ; (temp = va_arg( arglist, char * )) != 0; ){ printf( "%x=%x=%s\n", arglist, temp, temp ); } va_end( arglist ); printf("----------------------\n"); va_start( arglist, b ); printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist); for( ; (temp = va_arg( arglist, char * )) != 0; ){ printf( "%x=%x=%s\n", arglist, temp, temp ); } va_end( arglist ); printf("----------------------\n"); va_start( arglist, c ); printf( "3.%x=%x=%s\n",arglist,*(char **)arglist,*(char **)arglist); for( ; (temp = va_arg( arglist, char * )) != 0; ){ printf( "%x=%x=%s\n", arglist, temp, temp ); } va_end( arglist ); return 0; } int main(void) { aaa("1","A","B","C","D",0); return 0; } <コンパイルコマンド> xlC -o sample sample.cpp <バージョン6.00実行結果=正しい結果> 1.a=2ff22568 2.b=2ff2256c ---------------------- 3.2ff2256c=10002460=A 2ff22570=10002460=A 2ff22574=10002462=B 2ff22578=10002464=C 2ff2257c=10002466=D ---------------------- 3.2ff22570=10002462=B 2ff22574=10002462=B 2ff22578=10002464=C 2ff2257c=10002466=D ---------------------- 3.2ff22574=10002464=C 2ff22578=10002464=C 2ff2257c=10002466=D <バージョン9.00実行結果=正しい結果> 1.a=2ff22a48 2.b=2ff22a4c ---------------------- 3.2ff22a4c=10000a30=A ←おかしい 2ff22a54=10000a32=B 2ff22a58=10000a34=C 2ff22a5c=10000a36=D ---------------------- 3.2ff22a50=10000a32=B ←ただしい 2ff22a54=10000a32=B 2ff22a58=10000a34=C 2ff22a5c=10000a36=D ---------------------- 3.2ff22a54=10000a34=C ←おかしい 2ff22a5c=10000a36=D

  • Cコンパイラ(gcc)について

    はじめまして。 C言語のコンパイラについてお尋ねしても宜しいでしょうか。 以下のファイルが存在します。 ・test.c(C言語のソースファイル) ・test.exe(上記ソースをコンパイルしたもの。Windows環境で現在稼動してます) test.cの中身を一部変更し、コンパイルする必要があるのですが、 (恥ずかしながら、コンパイルした人間はもう居ないので) 何のコンパイラを使ったか、判りません。 コンパイルするときに使用したであろうコマンドがあります。 gcc test.c -WALL -03 -o test.exe 察するに、gccというコンパイラを使用したと思い MiniGW (http://yanchde.gozaru.jp/mingw/wingw_start.html) を使用してコンパイルをしてみました。 コンパイルは通るのですが、出来上がるexeファイルのサイズが 非常に小さいです。 (オリジナルのtest.exeは500KB以上ありますが、今回コンパイルで出来たものは40kbほどです) この場合、、オリジナルのtest.exeと今回コンパイルしたexeは 異なる挙動をする可能性はありますでしょうか。。 初歩的な質問で恐縮ですが、どうかご教授頂けると、幸いです。

  • GNUコンパイラとIntelコンパイラの違いについて

    今回fortranとC言語で書かれたWindows用プログラムをLinux用に移植することになりました。GNUのコンパイラを使用し無事コンパイルできたので実行したのですが"Segmentation fault"となりうまく実行できませんでした。そこで試しにIntelのコンパイラを使用しコンパイルしてみたところGNUのときとは違い"Segmentation fault"とは出ず、プログラム内のエラーチェックに引っかかり止ってしまいました。同じソースコードにもかかわらず止まる箇所が異なります。 今まで考えたことがなかったのですがGNUとIntelのコンパイラの違いはなんなのでしょうか?また、この二つ以外にいいコンパイラはあるのでしょうか?

  • コンパイラによってエラーが出たり出なかったり

    構造体をポインタでつなぐリスト構造を使ったソースを書いて、Borland C++ Compiler 5.5 でコンパイルしたものを実行するとエラーで止まってしまいました。 コンパイル時には何も警告が出ませんでした。 しかし、ソースを何度見てもバグらしいコードが見つからなかったので、試しに Microsoft .NET Framework SDK でコンパイルしてみたところ、こちらも警告も出ずにコンパイルが通って、実行してみたらこんどは正常に動作しました。 コンパイラによって、実行時にエラーが出たり出なかったりするということは初めてなのでその原因を知りたくて質問しました。 どういった場合にこのようなことが起こるのでしょうか。 Borland C++ で出たエラーは、おそらくセグメントエラーだと思います。 今のところ正常に動いているのですが、なにかデンジャラスなコードを書いてしまった気がして気持ち悪いです。