我有四个传感器(sen0-sen3),它们返回1
或0
,我使用sprintf
创建一个值数组。然后我尝试将它们与0000
或1000
等进行比较。
我的问题是即使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)));
}
答案 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;
并用它来比较。