Как изменить фактический аргумент, передаваемый функции в C? - PullRequest
0 голосов
/ 17 декабря 2011

Я хочу изменить фактический аргумент, передаваемый функции, а не ее копию. Например:

char str[] = "This is a string";

Я хочу создать функцию после вызова, для которой значение str отличается. Я пытался создать функцию, принимающую char** в качестве аргумента, но я просто не мог получить то, что хотел.

Ответы [ 4 ]

2 голосов
/ 17 декабря 2011

Я думаю, вы имеете в виду что-то вроде этого:

void update_string(char ** ptr)
{
    *ptr = strdup("This is a test");
    return;
}

Затем вызовите функцию следующим образом:

char * str = strdup("hello world\n");
printf("%s\n", str);
update_string(&str);
printf("%s\n", str);
0 голосов
/ 17 декабря 2011

Передайте char*, если вы хотите изменить фактическую строку:

foo(str);
...
void foo(char *some_string) {
   some_string[0] = 'A';
}

str будет теперь удерживать "Ahis is a string"

Если бы вместо str в виде массива вы имели: char *str = "Hello"; и хотели изменить, где str указал , то вы бы передали char**:

bar(&str);
...
void bar(char **ptr_string) {
   *ptr_string = "Bye";
}

str теперь будет точка до "Bye".

0 голосов
/ 17 декабря 2011

Чтобы изменить строку, переданную функции на месте, используйте обычный указатель.Например:

void lower_first_char(char *str)
{
    *str = tolower(*str);
}

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

0 голосов
/ 17 декабря 2011

Вы можете сдать char*.Указатель будет скопирован , но он по-прежнему будет указывать на ту же строку

Если вам требуется передать сам указатель (не его копию), вы должны передать char**

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