0
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。有关更多信息,您可以查看手册页...故事结束

编辑1:

好吧,这是结构名称 cur_client() ,在上面的代码中使用

4

3 回答 3

2

您可能想测试指针是否不为空。如果是这样,则在进行比较时不应取消引用它:

if (ptr != 0) 

或者:

if (ptr != NULL) 
于 2012-09-14T12:56:46.960 回答
1

ptr是指向 的指针struct s_client,而*ptrstruct s_client自身。

您不是在将指针与 0 进行比较,而是在尝试将结构与 0 进行比较,这是无法完成的。

于 2012-09-14T12:56:36.713 回答
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 上问的太基本的东西。

于 2012-09-14T13:17:51.350 回答