从共享内存中检查值的 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')
在我的代码中,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')