如何在 C 中的 char 数组末尾添加一个字符(零)



我是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..
    }

我需要修复数据的大小(为此,我试图在最后添加零(,我正在尝试在下面做;

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 would become 0.000
      //5.4 would become 5.400
    break;
    case 4:
      temp_char[4] = "";
      //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,但您尝试使用"EEEEE"(尾随零(和使用 temp_char[5](只有值 0..4 是合法的(在其中输入 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 位。

相关内容

  • 没有找到相关文章

最新更新