Как я могу передать ссылку на указатель символа в функцию и получить обратно измененное значение? - PullRequest
8 голосов
/ 03 ноября 2011

В этом коде я передал ссылку на символьный указатель на функциональный тест, а в функциональном тесте я вычислил размер и записал данные по этому адресу, после чего я распечатал его и получил нулевое значение.

#include <stdio.h>
#include <stdlib.h> 

void test(char*);

int main()
{

 char *c=NULL ;


 test(c);
 printf("After test string is %s\n",c);
 return 0;
}



void test(char *a)
{
 a = (char*)malloc(sizeof(char) * 6);
 a = "test";
 printf("Inside test string is %s\n",a);
}

вывод:

Inside test string is test
After test string is (null)

Ответы [ 2 ]

17 голосов
/ 03 ноября 2011

Вы не можете просто передать указатель. Вам нужно вместо этого передать адрес указателя.Попробуйте это:

void test(char**);


int main()
{

 char *c=NULL ;


 test(&c);
 printf("After test string is %s\n",c);

 free(c);   //  Don't forget to free it!

 return 0;
}



void test(char **a)
{
 *a = (char*)malloc(sizeof(char) * 6);
 strcpy(*a,"test");  //  Can't assign strings like that. You need to copy it.
 printf("Inside test string is %s\n",*a);
}

Причина в том, что указатель передается по значению.Это означает, что он копируется в функцию.Затем вы перезаписываете локальную копию внутри функции с помощью malloc.

Поэтому, чтобы обойти это, вам нужно вместо этого передать адрес указателя.

0 голосов
/ 03 ноября 2011

Привет, Сэм, вы передали указатель символа c в коде

 test(c);

, но куда вам нужно отправить адрес переменной charecter.

 test(&c);

В этом заключается разница в вашем коде, поэтому просто попробуйте это изменение в своем коде и выполните его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...