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

Есть у меня переменная 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;
}

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

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

  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");

    }

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

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

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

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

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>