我有以下结构,并有一些代码在下面使用它。控件不会进入if
语句(我需要检查chat_info[queue].message
是否为空)
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)
}
答案 0 :(得分:0)
// iterate over smaller list
for(int i = 0; i < SmallerList.size(); i++) {
TotalList.get(i).setText(SmallerList.get(i));
}
// set remaining items
for (int i = SmallerList.size(); i < TotalList.size(); i++) {
TotalList.get(i).setText("---");
}
的类型是什么?因为,如果它是一个字符串,那么当你将它设置为char message
时它将隐式转换。也许,你需要这样做:
= '\0';
答案 1 :(得分: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 */
}
答案 2 :(得分:0)
我看到的第一个问题:
if (filedata.data == NULL)
也可以写成:
if (!filedata.data)
在if语句中,您尝试将filedata.data
的内容复制到chat_info[queue].message
。但是,我们之前已经确定filedata.data
指向什么都没有。它是NULL。使用带有NULL指针的strcpy()
作为源应该不起作用。
也许你的意思是:
if (filedata.data != NULL)
也可以写成:
if (filedata.data)
其次,如果filedata.data
不是NULL,请考虑chat_info[queue].message[0] == '\0'
何时为真。
strcpy(chat_info[queue].message, filedata.data);
if(chat_info[queue].message[0] == '\0') {
// Message was determined to be empty.
}
只有filedata.data
为空字符串才会出现这种情况。 (注意:这与NULL不同!)这就是你想要的吗?如果是这样,当前代码应该可以正常工作。