为什么不打印完整的字符数组?

时间:2015-12-10 02:08:15

标签: c arduino-uno

这是我的第一篇文章,请耐心等待。让我从代码开始:

#include<stdio.h>
#include<string.h>

char inp[80], cmd[80];
char address[80],value[80];
boolean stringComplete = false;

void setup() {
    Serial.begin(9600);
}  

void loop() {
  serialEvent();
  if (stringComplete) {
    parse_cmd(inp);

    Serial.println(cmd);delay(1000);
    Serial.println(address);delay(1000);
    Serial.println(value);delay(1000);

    memset(inp, 0, strlen(inp));
    stringComplete = false;
  }
}

void serialEvent() {
  int i=0;
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inp[i] = inChar;delay(250);
    if (inChar == ';') {stringComplete = true;}
  i++;
  }
}

void parse_cmd(char *string){
  int i=0,j=0;
  for (i;i<strlen(string);i++) {
    if (string[i]==';' || string[i]==' ') break;
    else cmd[i] = string[i];      
  }
  i++;j=0;
  for (i;i<strlen(string);i++) {
    if (string[i]==';' || string[i]==' ') break;
    else address[j] = string[i];  
  }
  i++;j=0;
  for (i;i<strlen(string);i++) {
    if (string[i]==';' || string[i]==' ') break;
    else value[j] = string[i];
  }  
}

该程序采用三个字的字符串,并创建三个单独的字符数组。

问题在于,当我尝试打印三个char变量时,由于某些原因,其中只有一个打印好了。

说我输入:1234 5678 90; 我希望看到回报: 1234 5678 90

相反,我得到: 1234 8 0

仅打印第二个和第三个单词的最后一个字符。

这三个单词的代码完全相同,所以我无法理解为什么第二和第三次打印错误。

非常感谢,

MR

1 个答案:

答案 0 :(得分:1)

在加载地址和值的缓冲区时,您没有递增j。

请注意,如果数据太多,输入例程(serialEvent)也不会停止,并且会超出缓冲区。