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 中工作的主要内容,如果未能解决你的问题,请参考以下文章

关于 sprintf 函数如何在 C 中工作的困惑

通知突然停止在iOS应用程序中工作

不幸的是,应用程序已停止在模拟器中工作

推送通知停止在parse.com android项目中工作

sdcc 在 keil 中工作的代码上给出语法错误

如何解决sprintf参数类型错误导致程序崩溃