我正在将两个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
个变量;我库中的原型设置就是这样。
答案 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;
}