ページ 11

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

Posted: 2009年9月11日(金) 16:05
by binoruto
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

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

Posted: 2009年9月11日(金) 16:20
by b
test関数の
if(dev == "video")を
if(strcmp(dev,"video")==0)
にすればよいかと。

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

Posted: 2009年9月11日(金) 16:26
by binoruto
返信ありがとうございました。

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

で解決しました。

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

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

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

Posted: 2009年9月11日(金) 18:29
by binoruto
> >snprintf (dev, 6,"%s\0","video");
> \0はいらないです。たぶん、終端に\0が自動的に追加されたはず。

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

以上です。