为啥说,信号处理函数里面不要用printf等库函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥说,信号处理函数里面不要用printf等库函数相关的知识,希望对你有一定的参考价值。

像printf()和malloc()之类的标准库函数,它们会使用全局的数据(比如malloc()需要使用进程的堆数据结构)是不可重入的,即使加锁也无法解决,加锁可以使得库函数Tread-safe,但是无法解决可重入。
如果需要用这些printf或者malloc之类的函数
可以设置flag, 在信号处理函数之外 根据flag做相应的操作
参考技术A printf函数是一个不可重入函数,会引起程序死锁

将两个字符串连接起来,不要用strcat函数。

3.将两个字符串连接起来,不要用strcat函数。

#include<stdio.h>
void main()

char s1[80],s2[40];
int i=0,j=0;
printf("\\ninput stringl:");
scanf("%s",s1);
printf("input string2:");
scanf("%s",s2);
while(s1[i]!='\\0')
i++;
while(s2[j]!='\\0')
s1[i++]=s2[j++];
s1[i]='\\0';
printf("The new string is:%s\\n",s1);



以上是关于为啥说,信号处理函数里面不要用printf等库函数的主要内容,如果未能解决你的问题,请参考以下文章

STM32为啥要用重定向printf来打印串口数据?直接用串口发送函数不行吗

C语言关于函数声明的问题,为啥声明后还是报错说函数未定义

为啥说 malloc() 和 printf() 是不可重入的?

在学STM32的USART1,用Printf函数向超级终端打印信息。为啥超级终端没有反应?求帮助。

将两个字符串连接起来,不要用strcat函数。

dll文件可以修改里面的函数吗?