Почему мне не удается преобразовать строку в строку C, пытаясь таким образом? - PullRequest
0 голосов
/ 26 апреля 2020

Мой код в VS2019 не работает. В последней строке кода компилятор выдает ошибку.

#include <iostream>
#include <string>
using namespace std;

struct struct1
{
    string name;
};

void main()
{
    struct1* obj1 = new struct1();
    obj1->name = "Hello";

    // compiler says 'initializing': cannot convert from 'const _Elem *' to 'char [25]'
    char str[25] = (obj1->name).c_str();

}

Ответы [ 2 ]

3 голосов
/ 26 апреля 2020

c_str() возвращает указатель на начало символьных данных строки. Вам нужно будет скопировать символы в ваш массив, используя что-то вроде strncpy().

1 голос
/ 26 апреля 2020

Есть много способов сделать это, но сначала вы должны изменить способ инициализации массива char, потому что вы сделали это неправильно.

это та же самая программа, но работающая

#include <iostream>

using namespace std;

struct struct1
{
    string name;
};



int main()
{
    struct1* obj1 = new struct1();
    obj1->name = "Hello";
    char str[25] = "";
    memcpy(&str,obj1->name.c_str(),obj1->name.size());
    cout << str << endl;
}
...