比较C中ASCII字符串的数值

时间:2016-01-14 19:30:14

标签: c floating-point ascii atof

我正在将两个ASCII字符数组写入LCD屏幕。但是我需要一个if条件来比较这两个值。

最初我试图简单地比较它们:

if(currentTemp < triggTemp)
{
   alarmTriggered = true;
} 

由于这不起作用,我试图使用atof()将它们从ASCII字符串转换为浮点数。

然而,这似乎也不想工作,我在这里错过了一些愚蠢的东西吗?下面的必要代码:

void main () {

    char triggTemp;
    int buttonBool = 0;
    bool alarmTriggered = false;
    char currentTemp;
    double f_triggTemp = 0;
    double f_currentTemp = 0;


  TRISC = 0x00;
  init();
  Init_lcd();



  while(1) 
  {
      //char bufferString[4];
      currentTemp = get_temp();

      f_currentTemp = atof(currentTemp);
      f_triggTemp = atof(triggTemp);

      if(f_currentTemp < f_triggTemp)
      {
          alarmTriggered = true;
      }



      if(alarmTriggered == true)
      {
          soundBuzzer();
      }
}

以这种形式从函数返回值:

//some function
char bufferString[4];

sprintf(numberString, "%s.%s", itoa(bufferString,setTemp,10),
             itoa(bufferStringDec,setTempDec,10));

    return numberString;

本质上,我试图比较这些ASCII字符的字符数组,以便我可以使用if条件来触发警报。

我试图保持代码片段简短,我可以根据要求澄清。谢谢你的帮助。

编辑:我知道我将atof用于double个变量;我库中的原型设置就是这样。

3 个答案:

答案 0 :(得分:0)

我认为这就是你在做的事情:

char* some_function() {
  char temporary_string_buffer[32]; // Or some other fixed size
  snprintf(temporary_string_buffer, 32, "some format");
  return temporary_string_buffer;
}

你做不到。好的,你可以这样做 - 你可能只是 - 但它有未定义的行为,因为temporary_string_buffer的生命周期以return语句结束。在调用者中,函数将返回通俗称为“悬空指针”的函数;换句话说,指针的目标不再具有任何意义。因此,当您在该值上调用atof时,它可能已被用于完全不同的东西。

如果要将字符串返回给调用者,请执行以下操作:

  • 使用malloc动态分配字符串,并确保调用者知道他们需要释放它;或

  • 让调用者为您提供缓冲区的地址及其长度(作为参数),并填写提供的缓冲区。您可以使用返回代码作为成功指示符,或者(如sprintf)作为字节数或其他任何内容。

答案 1 :(得分:0)

char currentTemp; ... atof(currentTemp);无效。 double atof(const char *nptr)需要一个指向字符串的指针,而不是char

答案 2 :(得分:0)

创建一个函数来为您进行比较。这是一个完整的测试程序。您只需逐个比较数组元素。

int is_greater(char a[], char b[], int z, int z1) {
    int i = 0;
    for( i = 0; i < z; i++ ) {
        if( a[i] > b[i] ) return 1;
    }
    return 0;
}