在我的代码中,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);
}
}
答案 0 :(得分:0)
你的代码在几个地方是错误的(你应该编译并激活所有警告):
首先,您的标志字符串没有分配空间char *flag
应该更改为char flag[123 /* some correct size */]
之类的内容。如果你不这样做,你的第一个sscanf是错误的(你有一些意想不到的行为)
然后if (flag == "1")
实际上会比较两个指针(一个指针与一个指向“1”的指针,这不是你想要的。
您可能希望撰写if (strcmp(flag, "1") == 0)
if (*flag == '1')