Передача указателя на символьный массив в функцию

Категория: C / C++ Комментариев: 3

Есть у меня переменная char *str и функция editstr. Нужно в этой функции изменить значение переменной str.
Пытался сделать так:

#include <stdio.h>

void main(){
 char *str;
 edistr(str);
 printf("%s",str);
}

int edistr(char *str){
 str = "some data";
 return 1;
}

Но вместо «some data» на экране выводилось непонятно что.

После недолгих поисков нашел обсуждение такой-же проблемы.
Там предлагается несколько вариантов решения этой проблемы, но в моем случае наиболее подходящим оказался вариант с передачей в функцию не указателя на символьный массив, а ссылки на указатель на символьный массив:

#include <stdio.h>

void main(){
 char *str;
 edistr(&str);
 printf("%s",str);
}

int edistr(char **str){
 (*str) = "some data";
 return 1;
}
Автор: Кто-то   @   19 марта 2010 Комментариев: 3
Метки : ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 3

Комментарии
мая 11, 2010
2:41
#1 rootkit :

Вот спасибки! Помогло и мне.

июня 15, 2010
1:58

Вообще-то данный код не является корректным. Во-первых си-строки (char*) нельзя присваивать через оператор равно. Через оператор равно можно только инициализировать. Во-вторых, прежде чем присваивать было бы неплохо выделять память или задать статический массив:

#include

#include

void editstr (char* str);

int main ()

{

char str[20];

editstr (str);

std::cout << str << std::endl;

return 0;

}

void editstr (char *str)

{

strcpy (str, "tro-lo-lo");

}

Автор июня 15, 2010
21:54

> си-строки (char*) нельзя присваивать через оператор равно.

Да, нельзя. В данном случае это не присваивание как таковое, а «указание» указателем на строку. В этом случае память выделять и не нужно.

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

оставить комментарий

Предыдущая запись
«
Следующая запись
»