Передача строки в функцию

Как можно передать строку в функцию так, чтобы манипуляции с этой строкой внутри функции не меняли ее значения при выходе из функции?


Ответы (1 шт):

Автор решения: Sergey

В языке С нет типа "строка". Я не знаю, что имели в виду Вы, но при работе со строками, в качестве параметра функции передаётся указатель тип char *. В соответствии с общей идеологией языка С этот указатель не меняется. Но Вы легко можете, находясь внутри функции, изменить (испортить?) ту память, на которую указывает этот указатель.

Если Вы не собираесь менять содержимое памяти, переданной в функцию по указателю, то проще всего гарантировать себя от проблем так:

void function(char *str) {

    char *cp;

    cp = malloc(strlen(str)+1);   // Выделяем память под копию строки
    strcpy(cp, str);              // Копируем содержимое строки
    // Здесь что-то делаем с полученной строкой
    free(cp);                     // Освобождаем занятую память
    return;
}
→ Ссылка