sprintf 导致我的程序停止在 keil 中工作
Posted
技术标签:
【中文标题】sprintf 导致我的程序停止在 keil 中工作【英文标题】:sprintf cause my program stop working in keil 【发布时间】:2020-11-17 23:32:12 【问题描述】:这是我的主要功能,我不知道为什么当我在 proteos 中模拟它时,我发现代码运行到 sprintf 并且下一行没有运行,当我评论它时,lcd 上打印的“salam” 我使用 mingw 编译器并且我已经安装了所有库 诠释主要(无效) /* 用户代码开始 1 */
/* 用户代码结束 1 */
/* MCU 配置------------------------------------------- -------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
char q[5] = "salam" ;
int a = 6541;
//float b = a/7;
LCD1602_Begin8BIT(RS_GPIO_Port,RS_Pin,E_Pin,D0_GPIO_Port,D0_Pin,D1_Pin,D2_Pin,D3_Pin,D4_GPIO_Port,D4_
Pin,D5_Pin,D6_Pin,D7_Pin);
LCD1602_setCursor(1,1);
//snprintf(q, 20, "%10d", 1234567);
//LCDCHAR_Puts(0, 0, q);
//char command1[50], command2[50]; // Added
//char *temp[] = NULL, command1, command2, NULL; // Modified
//temp[0]="sum";
LCD1602_print("mahdi kahrizi");
LCD1602_2ndLine();
sprintf(q,"%d",a);
LCD1602_print(q);
【问题讨论】:
您还记得文件顶部的声明:#include <string.h>
吗?
【参考方案1】:
问题从这里开始。
char q[5] = "salam" ;
q
太短,无法存储此单词。它必须至少有 6 个字符长。
当您在数组边界之外写入时,这是未定义的行为。
当您将q
的长度更改为更长时
snprintf(q, sizeof(q), "%d", a);
【讨论】:
以上是关于sprintf 导致我的程序停止在 keil 中工作的主要内容,如果未能解决你的问题,请参考以下文章