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);
}
ПРИМЕЧАНИЕ. Будьте очень осторожны с этим, вы присваиваете строковый литерал и не пытаетесь его изменить.