繁体   English   中英

如何在C中的char数组末尾添加char(零)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM