我编写了以下代码以了解setjmp和longjmp函数,但我认为这个问题与这些函数无关。我期待输出为:
function1
function2
function2
但我一直在接受:
function1
function2
function1
作为输出。代码:
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
void f1(char * a);
void f2(char * a);
jmp_buf buf1;
int main(int argc, char *argv[])
{
char * w;
f1( w);
return 0;
}
void f1(char * a)
{
a = "funtion 1";
printf("%s\n",a);
int i = setjmp( buf1 );
if( i == 0 )
f2( a );
printf("%s\n", a);
}
void f2(char * a)
{
a = "function 2";
printf("%s\n",a);
longjmp( buf1 , 2 );
}
我在这里做错了什么?谢谢你的帮助。
答案 0 :(得分:2)
在c中没有通过引用传递它只能通过值传递。但是,您可以将指针传递给main()
中的指针,就像这样
int main(int argc, char *argv[])
{
char *w;
f1(&w);
return 0;
}
void f1(char **a)
{
*a = "funtion 1";
printf("%s\n", *a);
int i = setjmp( buf1 );
if (i == 0)
f2(a);
printf("%s\n", *a);
}
void f2(char **a)
{
*a = "function 2";
printf("%s\n", *a);
longjmp(buf1 , 2);
}
注意:要非常小心,你要分配一个字符串文字,你不应该尝试修改它。