[英]How to add a char (zero) at the end of char array in C?
我是C的新手(我改用Delphi / pascal),并尝试获取一些温度传感器值并使它们相等/固定大小以发送到MCU(使用Arduino IDE,因此我必须使用C)。
根据温度传感器和以下代码,数据长度(strlen())可以为3(如5.3、0.9、0.0等),4(如-4.2、19.8等)或5(如-15.6);
char value[5]; // must be char in order to send to MCU
if ((temp_data>=temp_max){
fix_size(value,true); //Error part. writes: "EEEEE" to reach fix size: 5
} else {
dtostrf(temp_data, 0, 1, value);
fix_size(value,false); //I'll use this to send data to screen later..
}
我需要固定数据大小(为此,我试图在末尾添加零),而Iam尝试在下面进行处理;
char fix_size(char temp_char[5],bool err=false){
if(err){
temp_char= "EEEEE";
Serial.println(temp_char);
return temp_char;
}
int num = strlen(temp_char);
// If strlen is 5 then it is OK and strlen cannot be 2 and 1 because of my temp sensor data processing (dtostrf(temp_data, 0, 1, value)) so I only need to take care 3 and 4
switch (num) {
case 3:
temp_char[3] = "0";
temp_char[4] = "\0";
//0.0 would become 0.000
//5.4 would become 5.400
break;
case 4:
temp_char[4] = "\0";
//15.2 would become 15.20
//-7.4 would become -7.40
break;
// -15.3 is in right format already
} | E.g. I tried for 15.4 and get
Serial.println(temp_char[0]); | 1
Serial.println(temp_char[1]); | 5
Serial.println(temp_char[2]); | .
Serial.println(temp_char[3]); | 4
Serial.println(temp_char[4]); | ؟
return temp_char;
}
但是,当我执行该应用程序时,我正在将奇怪的字符作为ArduinoIDE中的输出(反问号,正方形等)。 可能是什么问题,我该如何解决? 还是可以建议更好的方法? 谢谢现在。
注意:这个问题(问题)的源头更多地是关于嵌入式系统的,我已经在Electronics StackExchage上问了另一个问题,作为对此问题的参考(如果需要/需要,可以在这里阅读 )
至少三个问题。 首先,将temp_char[]
声明为5号,但您尝试使用temp_char[5]
(“ temp_char[5]
合法)将“ EEEEE”(其尾随零)放入6个字符。 )。
其次,赋值temp_char = "EEEEE"
只是更改了指针,实际上没有将任何内容复制到temp_char
。 您需要strcpy()
或类似的东西。
第三,您混淆了类型:
temp_char[4] = "0";
temp_char[4]
的类型为char
。 "0"
的类型为char *
,也就是说,它是指向字符的指针,而不是字符,因此您只是获得某个随机存储器地址的低8位。 您可能是说:
temp_char[4] = '0';
因为'0'
的类型为int
,表示ASCII值,因此在分配时将被适当地截断为8位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.