C:通过引用传递字符串?

时间:2016-03-18 16:25:38

标签: c parameter-passing pass-by-reference longjmp setjmp

我编写了以下代码以了解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 );
}

我在这里做错了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

中没有通过引用传递它只能通过值传递。但是,您可以将指针传递给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);
}

注意:要非常小心,你要分配一个字符串文字,你不应该尝试修改它。