0

我有四个传感器(sen0-sen3),它们返回10,我正在使用sprintf. 然后我试图将它们与0000or1000等​​进行比较。

我的问题是即使 is 的值sen_array1000它也永远不会进入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

4 回答 4

4

您所看到的是内存损坏的产物。问题是您已声明sen_array为 a char[4],它没有为终止 null 留下空间。更改sen_array为:

char sen_array[5];
于 2011-04-15T11:49:42.920 回答
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 */ }
于 2011-04-15T11:49:47.070 回答
1

我认为 sen_array 应该至少 5 个字符长,除非您将 sen_array 用于其他用途,否则更好更快的方法是

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

并以此进行比较。

于 2011-04-15T11:52:24.037 回答
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) {
  ...
}
于 2011-04-15T11:45:20.870 回答