2016-04-27 12 views
-1

私は以下の構造を持ち、以下にそれを使用するいくつかのコードを持っています。コントロールはmessageの型は何ですか?C言語のchar配列の内容を確認

struct chat{ 
    char message[MAXNAME]; 
    int client; 
    int group; 
    int flag; 
}; 
. 
. 
. 
. 

if(filedata.data==NULL) 
     { 
     printf("\n data is %s",filedata.data);} //displays "data is " 
     chat_info[queue].message[0]='\0'; //setting 0 before copying data 
     strcpy(chat_info[queue].message,filedata.data); 
     printf("\n data is %s",chat_info[queue].message);//displays "data is " 
     if(chat_info[queue].message[0]=='\0'){ 
    // not going into this if statement 
    //I also tried if(chat_info[queue].message== "") and if(chat_info[queue].message== NULL) 
} 
+2

'(filedata.data == NULL)の場合;' - > '末尾をドロップ;'問題を見るのを助けるために、自動フォーマッタを使用して提案します。 – chux

+0

コンテンツを後で上書きするときにメッセージを終了させる必要があるのはなぜですか? – Cyclonecode

+0

そのセミコロンは誤って入力されました - 私はまだ問題があります – noob

答えて

0

私が見る最初の問題:

のように書くこともできる
if (filedata.data == NULL) 

:もし内部一度

if (!filedata.data) 

をあなたはfiledata.dataの内容をchat_info[queue].messageにコピーしようとしています。しかし、以前は、filedata.dataは何も指摘していませんでした。 NULLです。ソースとしてNULLポインタを使用してstrcpy()を使用すると動作しません。

はおそらく、あなたは意味: filedata.dataがNULLでなかった場合

if (filedata.data) 

第二に、chat_info[queue].message[0] == '\0'は本当だろうときを考える:としても記述することができ

if (filedata.data != NULL) 

strcpy(chat_info[queue].message, filedata.data); 
if(chat_info[queue].message[0] == '\0') { 
    // Message was determined to be empty. 
} 

filedata.dataが空の文字列だった場合にのみ当てはまります。 (注:これはNULLとは異なります)これはあなたが望むものですか?もしそうなら、現在のコードはうまく動作するはずです。

参考:strcpy() documentation

0

(私はchat_info[queue].messageはそれがどの空であるかどうかを確認する必要があります)ifステートメントに行くのではありませんか文字列の場合は、= '\0';に設定すると暗黙的にキャストされるためです。おそらく、あなたは何をする必要があります。

if (chat_info[queue].message[0] == "\0")

+0

文字配列 - 文字メッセージ[MAXNAME]; – noob

+0

これは私の元の提案を排除します。 最初の 'if'文は、' file.data'が 'null'の場合にのみ実行されます。では、file.dataに対して 'strcpy'を呼び出すのはなぜですか?私たちはnullを知っていますか?私はここで奇妙なことが起こっていると感じている。 'if(chat_info [queue] .message [0] == NULL') – 0101010

+0

ifステートメントが単にfiledataを出力して内容を確認しただけであれば、 ) – noob

0
strcpy(chat_info[queue].message,filedata.data); 
/* You have assigned some data for chat_info[queue].message 
* in the above step assignment should be successful. 
*/ 

if(chat_info[queue].message[0]=='\0') 
/* How can message[0] be null? It will never be. Think of what you're 
* trying to achieve with the condition. 
* If you're checking for a non-empty message, then it should be 
* chat_info[queue].message[0]!='\0' 
*/ 
{ 
./* some stuff here */ 
} 
関連する問題