Передача строки в функцию
Как можно передать строку в функцию так, чтобы манипуляции с этой строкой внутри функции не меняли ее значения при выходе из функции?
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
В языке С нет типа "строка". Я не знаю, что имели в виду Вы, но при работе со строками, в качестве параметра функции передаётся указатель тип char *. В соответствии с общей идеологией языка С этот указатель не меняется. Но Вы легко можете, находясь внутри функции, изменить (испортить?) ту память, на которую указывает этот указатель.
Если Вы не собираесь менять содержимое памяти, переданной в функцию по указателю, то проще всего гарантировать себя от проблем так:
void function(char *str) {
char *cp;
cp = malloc(strlen(str)+1); // Выделяем память под копию строки
strcpy(cp, str); // Копируем содержимое строки
// Здесь что-то делаем с полученной строкой
free(cp); // Освобождаем занятую память
return;
}