struct s_client *cur_client(void){
return (struct s_client *) pthread_getspecific(getclient);
}
int32_t chk_process (int32_t) {
...
struct s_client *ptr = cur_client();
//FIXME
// how could i check in this line , just when the value of
// ptr is not zero , then it goes to it's next line?`
send_data (ptr, index);
...
...
}
我想检查一下,只有当ptr的值不为零时,才会检查它的下一行,我试过这行代码
if (*ptr != 0)
但正如预期的那样,这是不正确的,因为它没有检查价值!
Edit2: 好吧,我找到了自己的原因,因为ptr已从pthread_getspecific中填满。如果对正在销毁其线程特定数据的键调用pthread_getspecific,则返回值NULL。有关详细信息,您可以查看手册页...故事结束
Edit1:
那么这是结构名称cur_client(),在上面的代码中使用
答案 0 :(得分:2)
您可能想测试指针是否为空。如果是这样,在进行比较时不应取消引用它:
if (ptr != 0)
或者:
if (ptr != NULL)
答案 1 :(得分:1)
ptr
是指向struct s_client
的指针,而*ptr
则是struct s_client
本身。
您没有将指针与0进行比较,而是尝试将结构与0进行比较,这是无法完成的。
答案 2 :(得分:0)
您似乎想要检查指针指向的结构是否仅包含零。你可以这样做:
int i, isNonzero = 0;
for (i = 0; i < sizeof(*ptr); i++) {
if (((char *)ptr)[i] != 0) {
isNonzero = 1;
break;
}
}
if (isNonzero) {
/* etc. */
}
编辑:不,ptr不是指针的地址,它是指针本身。如果要检查它,请将其与NULL进行比较。指针只是一个普通变量本身,它包含一个表示内存地址的整数。指针类型的变量(ptr是)本身就有一个地址,当你使用!=运算符时,你认为它会被比较。不,它没有 - 你必须写
if (&ptr != NULL) {
}
这样做。别担心,其他答案的建议也很好。
请尽快阅读有关C指针的教程。这是StackOverflow上要求的基本内容。