我正在将两个 ASCII 字符数组完美地写入 LCD 屏幕。但是我需要一个 if 条件来比较这两个值。
最初我试图像这样简单地比较它们:
if(currentTemp < triggTemp)
{
alarmTriggered = true;
}
由于这不起作用,我尝试使用 atof() 将它们从 ASCII 字符串转换为 float 。
但是这似乎也不起作用,我在这里错过了一些愚蠢的事情吗?必要的代码如下:
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 字符的 char 数组,以便我可以使用 if 条件来触发警报。
我试图保持代码片段简短,我可以根据要求进行澄清。感谢您的帮助。
编辑:我知道我正在使用 atof
到 double
变量中;我的库中的原型(prototype)就是这样设置的。
最佳答案
我认为这就是你正在做的事情:
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)作为字节数,或者其他。
关于在 C 中比较 ASCII 字符串的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798063/