sprintf cause my program stop working in keil
这是我的主要功能,我不知道为什么当我在 proteos 中模拟它时,我发现代码运行到 sprintf 并且下一行没有运行,当我评论它时"salam"印刷在液晶显示器上
我使用 mingw 编译器并且我已经安装了所有库
诠释主要(无效)
{
/* 用户代码开始 1 */
/* 用户代码结束 1 */
/* MCU 配置------------------------------------------- -------------*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /* 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); |
问题从这里开始。
1 | char q[5] ="salam" ; |
当您在数组边界之外写入时,这是未定义的行为。
当你将
1 |