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

时间:2015-11-01 18:36:57

标签: c if-statement 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);
    }                
}

1 个答案:

答案 0 :(得分:0)

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

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

您可能希望撰写if (strcmp(flag, "1") == 0)

if (*flag == '1')