【发布时间】:2021-04-28 14:29:10
【问题描述】:
我对 C 语言相当陌生,并且一直在尝试使用 Proteus 上的一些 arduino 项目。我最近尝试使用 Peter Fleury 的库实现键盘和 LCD 界面,到目前为止我输入的字符显示正常,但是在尝试打印到串行端口时遇到了问题。这就像键的值不断与每次迭代连接,所以输出有额外的字符,如下所示:
逗号之前的值来自'key'变量,它之后的值来自'buf'变量:
151 (我在第二次迭代中输入的 5 与第一次迭代中的 1 相加,然后放入我打印的变量中)
我认为这可能是由于我缺少/不正确使用指针,这是我的代码:
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "mat_kbrd.h"
#include "funciones.h"
#include "menu.h"
char buf[256];
char* coma = ",";
int main(void)
{
pin_init();
serial_begin();
lcd_init(LCD_DISP_ON);
kbrd_init();
bienvenida();
while (1) {
int i = 0;
char key = 0;
//char *peso;
//int pesoSize = 1;
char peso[100];
//peso = calloc(pesoSize,sizeof(char));
int salida = 0;
lcd_clrscr();
desechos();
key = kbrd_read();
if (key != 0) {
lcd_gotoxy(0,3);
lcd_putc(key);
_delay_ms(2000);
lcd_clrscr();
cantidad();
while (salida != 1) {
char keypeso = 0;
keypeso = kbrd_read();
//pesoSize = i;
//peso = realloc(peso,pesoSize*sizeof(char));
if (keypeso != 0) {
if (keypeso == '+') {
salida = 1;
keypeso = *("");
lcd_clrscr();
calcularTotal(key,peso);
_delay_ms(2000);
} else {
lcd_gotoxy(i,1);
lcd_putc(keypeso);
snprintf(peso, sizeof peso, "%s%s",peso, &keypeso);
//strcat(peso,&keypeso);
i++;
_delay_ms(2000);
}
}
}
snprintf(buf, sizeof buf, "%s%s%s", &key,coma,peso);
serial_println_str(buf);
}
}
}
【问题讨论】:
-
也许是
snprintf(peso, sizeof peso, "%s%s",peso, &keypeso);你用自己覆盖了peso数组。这看起来像是将keypeso附加到peso数组。 -
keypeso = *("");写keypeso = '\0';的方式很奇怪。keypeso不是字符串,"%s", &keypeso没有意义。 -
对 snprintf 使用相同的字符串作为输入和输出会导致未定义的行为