如何比较整数数组?

时间:2011-04-15 11:42:52

标签: c strcmp

我有四个传感器(sen0-sen3),它们返回10,我使用sprintf创建一个值数组。然后我尝试将它们与00001000等进行比较。

我的问题是即使sen_array的值为1000,它也不会进入else if条件(直到else条件)。

char sen_array[4];

sprintf(sen_array,"%d%d%d%d",sen0,sen1,sen2,sen3);
if(strcmp("0000",sen_array)==0)
{
    motor_pwm((156*(0.20).),(156*(0.20)));
}
else if(strcmp("1000",sen_array)==0)
{
    motor_pwm((156*(0.40)),(156*(0.40)));
}
else
{
    motor_pwm((156*(0.80)),(156*(0.80)));
}

4 个答案:

答案 0 :(得分:4)

您所看到的是内存损坏的工件。问题是您已将sen_array声明为char[4],这不会为终止空值留出空间。将sen_array更改为:

char sen_array[5];

答案 1 :(得分:2)

不使用STL,我认为比较整数数组的最佳方法是使用比较内存块的memcmp函数。

int sen_array1[] = { 1, 2, 3, 4 } ;
int sen_array2[] = { 1, 2, 3, 4 } ;
if(memcmp(sen_array1, sen_array2, sizeof(int)*4) == 0) { /* do something */ }

答案 2 :(得分:1)

你的sen_array应该至少有5个字符 - 为0终结符腾出空间。

char sen_array[4];
sprintf(sen_array, "%d%d%d%d", 1, 2, 3, 4);

以上将'1''2''3''4''\ 0'写入sen_array - 溢出它并可能影响附近的变量

使用char sen_array[5];

一个更好的解决方案是使用整数:

int sa = sen0 * 1000 + sen1 * 100 + sen2 * 10 + sen3;

if (sa == 1000) {
  ...
} else if (sa == 1001) {
  ...
}

答案 3 :(得分:1)

我认为sen_array应该至少有5个字符长,除非你使用sen_array做其他事情,一个更好更快的方法就是

int res = 1000*sen0+100*sen1+10*sen2+sen3;

并用它来比较。