从共享内存中检查值的 if 语句有什么问题?

What is wrong in the if statement which checks a value from shared memory?

在我的代码中,flag 的值由共享内存中的值决定。当执行打印时,它说该值为 1,因为它打印“1”。那么,为什么我的程序不继续执行 'if (flag == "1")' 中的代码?

char *      shm_addr = (char *) MAP_FAILED;
char *      shm_name = "Print";
int         size = -1;
int         rtnval;
char *      flag;
int         numberToPrint = 0;

size = 32;

while (shm_addr == (char *) MAP_FAILED)
{         
    shm_addr = my_shm_open (shm_name);
}

sscanf (shm_addr, "%s", flag);

printf ("\ndata (@ %#x): '%s'\n", (unsigned int)(intptr_t) shm_addr, flag);

while (numberToPrint != 6)
{
    if (flag == "1")
    {
        numberToPrint += 2;
        printf("%i ", numberToPrint + 2);
        flag = "0";
        sscanf (flag, "%s", shm_addr);
    }                
}

你的代码有几个地方是错误的(你应该在激活所有警告的情况下编译): 首先,您的标志字符串没有分配 space char *flag 应该更改为类似 char flag[123 /* some correct size */] 的内容。如果你不这样做,你的第一个 sscanf 是错误的(你有一些意想不到的行为)

然后if (flag == "1")实际上会比较两个指针(标志之一和指向“1”的那个,这不是你想要的。

你可能想写 if (strcmp(flag, "1") == 0) 甚至 if (*flag == '1')