为什么不打印完整的字符数组?
Why doesn't it print the full character array?
这是我的第一个 post 所以请多多包涵。让我从代码开始:
#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 变量时,出于某种原因只有其中 1 个打印正常。
假设我输入:1234 5678 90;
我希望在 return 中看到:
1234
5678
90
相反,我得到:
1234
8个
0
第二个和第三个单词只打印最后一个字符。
这三个词的代码完全一样,所以我不明白为什么第二个和第三个打印错了。
非常感谢,
先生
加载地址和值的缓冲区时,您没有递增 j。
请注意,如果数据过多,您的输入例程 (serialEvent) 也不会停止,并且会溢出您的缓冲区。
这是我的第一个 post 所以请多多包涵。让我从代码开始:
#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 变量时,出于某种原因只有其中 1 个打印正常。
假设我输入:1234 5678 90; 我希望在 return 中看到: 1234 5678 90
相反,我得到: 1234 8个 0
第二个和第三个单词只打印最后一个字符。
这三个词的代码完全一样,所以我不明白为什么第二个和第三个打印错了。
非常感谢,
先生
加载地址和值的缓冲区时,您没有递增 j。
请注意,如果数据过多,您的输入例程 (serialEvent) 也不会停止,并且会溢出您的缓冲区。