char配列で作成したデータとchar *の比較

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
binoruto

char配列で作成したデータとchar *の比較

#1

投稿記事 by binoruto » 16年前

binorutoと申します。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
    ⇒C++のソースからCの関数を呼び出しその中でC++上で定義したchar配列をつかっております。

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
⇒例として↓のようなコードを用意しました。
C++
main(){
char dev[6];
memset(dev,'\0',6);
snprintf (dev, 6,"%s\0","video");
test(dev);
}


C関数
    
void test(char *dev)
{
     printf("%s",dev);
     if(dev == "video")
     {
          printf("%s\n","Success");
     }
     else
     {
          printf("%s\n","Error");
     }    
}
 [1.4] 今何がわからないのか、知りたいのか
    ⇒これ実行すると出力結果
     videoError     となるんですが

     videoSuccessにしたいときどうしたらよいでしょうか。

[2] 環境  
 [2.1] OS : Linux
 [2.2] コンパイラ名 : gcc4.1.2

b

Re:char配列で作成したデータとchar *の比較

#2

投稿記事 by b » 16年前

test関数の
if(dev == "video")を
if(strcmp(dev,"video")==0)
にすればよいかと。

binoruto

Re:char配列で作成したデータとchar *の比較

#3

投稿記事 by binoruto » 16年前

返信ありがとうございました。

> if(strcmp(dev,"video")==0)

で解決しました。

non

Re:char配列で作成したデータとchar *の比較

#4

投稿記事 by non » 16年前

>snprintf (dev, 6,"%s\0","video");
\0はいらないです。たぶん、終端に\0が自動的に追加されたはず。
文字数をオーバーしたときには、コンパイラによって振る舞いが違ってたかもしれないけど。
今回は6文字限定なので。

binoruto

Re:char配列で作成したデータとchar *の比較

#5

投稿記事 by binoruto » 16年前

> >snprintf (dev, 6,"%s\0","video");
> \0はいらないです。たぶん、終端に\0が自動的に追加されたはず。

返信ありがとうございます。
わかりました。snprintfについて調査して対応します。

以上です。

閉鎖

“C言語何でも質問掲示板” へ戻る