C: Передача строк по ссылке?

Я написал следующий код для понимания функций 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 ответ

В 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);
}

ПРИМЕЧАНИЕ. Будьте очень осторожны с этим, вы присваиваете строковый литерал и не пытаетесь его изменить.

Другие вопросы по тегам