Есть у меня переменная 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;
}
Вот спасибки! Помогло и мне.
Вообще-то данный код не является корректным. Во-первых си-строки (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");
}
> си-строки (char*) нельзя присваивать через оператор равно.
Да, нельзя. В данном случае это не присваивание как таковое, а «указание» указателем на строку. В этом случае память выделять и не нужно.
Это довольно утрированный пример, в других более серьезных случаях само собой без выделений памяти не обойтись.