当前位置:  技术问答>linux和unix

setjmp函数,一个jmp_buf用两次会有什么情况? 谢谢

    来源: 互联网  发布时间:2016-12-01

    本文导语:  jmp_buf jbuf; void er(void) {      if( setjmp(jbuf)==1 )      {          printf("er 1n");      }      else      {       printf("er not 1n");      }     if(getchar()!='a')     longjmp(jbuf,2);     else     return; } int main...



jmp_buf jbuf;

void er(void)
{
     if( setjmp(jbuf)==1 )
     {
         printf("er 1n");
     }
     else
     {
      printf("er not 1n");
     }

    if(getchar()!='a')
    longjmp(jbuf,2);
    else
    return;

}

int main(int argc, char * argv[]) 
{

     if( setjmp(jbuf)==2 )
     {
         printf("main 2n");
     }
     else
     {
      printf("main not 2n");
     }

     er();
     longjmp(jbuf,2);

     

     exit(0);
    
};

|
进入er()函数后,当getchar()=='a'时er()函数返回,此时进入main函数,但是由于er()函数中调用setjmp,所以就会用er()函数中的程序状态覆盖main函数的运行环境,此时如果输入不是'a'的字符可以正常打印,但是当输入getchar()=='a'的时候程序就会出问题

|
因为你er()中调用了setjmp,调用的时候就已经覆盖了

    
 
 

您可能感兴趣的文章:

  • 浅析C语言中的setjmp与longjmp函数
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • setjmp、longjmp的实现,请指教
  • setjmp SEGMENTATION FAULT 错误。
  • 困惑:setjmp()和longjmp()
  • 关于signal与setjmp的配合使用时遇到的一个问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3