比较字符会导致总线错误

时间:2013-04-05 00:49:53

标签: c++ char

我试图弄清楚运行时错误。我有一个struct数据类型,并在数组items[]中实现它。在结构中,定义了char name。 我也正在使用cin将用户输入读入char数据类型。

i=0;
do {
printf("%c\n", items[i].name);
printf("%c\n", itemname);

//if ( items[i].name == itemname ) 
//found=true;
i++;
} while (i<numofitems || found);

如果我取消注释if语句,printf("%c\n", itemname);似乎会运行数千次,然后是Bus error: 10。请注意,numofitems目前仅为5。

从当前编写的方式输出:

A
C
B
C
C
C
D
C
E
C

任何想法为什么我不能简单地比较一个char是否等同于另一个?

4 个答案:

答案 0 :(得分:4)

您的病情应为i<numofitems && !found。现在,如果其中任何一个为真,它会保持循环,并且found在第三次迭代时变为真。

我将其重写为:

for (int i = 0; i <numitems; ++i)
    std::cout << items[i].name << '\n';
    std::cout << itemname << '\n';

    if ( items[i].name == itemname ) 
        break;
}

答案 1 :(得分:2)

正如@chris所提到的,你的终止条件看起来不对。如果将found设置为true,则循环将永远不会终止。

答案 2 :(得分:1)

当您设置“found = true”时,您将使循环永远运行。更改循环测试,以便在设置找到时退出,例如

} while (i < numofitems && found == false );

或在设置找到后放置一个break语句,例如

if ( items[i].name == itemname ) {
    found = true;
    break;
}

答案 3 :(得分:0)

是的。另请注意,打印出10个字符。每个循环迭代打印两次,因此循环执行正常,直到我超过numofitems。由于此时'found == true',循环尝试迭代第六次,导致总线错误(通常称为segmentation fault