Utilizarea c.str pentru a converti din string în cstring (Programare, C++, String, Șiruri C)

amol_Dee_sandwich a intrebat.
a intrebat.

Practic niște lucrări cu cstring și string. trecerea de la string la cstring folosind c_str() primesc o eroare de compilare de tip de date incompatibile.De exemplu, acesta este codul care dă eroarea respectivă:

string str = "StackOverFlow";
char inCstring[20]{};
inCstring = str.c_str();

Vreo idee?

Comentarii

  • Încercați să utilizați char* inCstring; în loc de char inCstring[20]{};. –  > Por phantom.
  • Știi ce face c_str? –  > Por user253751.
  • Dacă ai găsit o soluție, ar trebui să o postezi ca răspuns, nu în întrebare. –  > Por Barmar.
  • Nu poți atribui la array-uri în C sau C++. –  > Por Barmar.
2 răspunsuri
Vicente Cunha

Problema este că str.c_str() returnează un const char*, iar tu încerci să îl treci la un char*. Folosiți strcpy pentru a obține rezultatul așteptat:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main()
{
    string str = "StackOverFlow";
    char inCstring[20];

    strcpy(inCstring, str.c_str());

    cout << "str: " << str << endl;
    cout << "inCstring: " << inCstring << endl;

    return 0;
}

Comentarii

  • Tocmai am observat că OP a găsit același răspuns ca și „Metoda B”. Nu cred că este ceva greșit în ceea ce privește „stilul de programare”, doar la faptul că nu este o atribuire „lvalue =”. Metoda A lipsește pentru că noul cstring este const. –  > Por Vicente Cunha.
  • Problema este că el încerca să atribuie la o matrice (char [] type) , nu char * . –  > Por M.M.
  • @M.M. Este adevărat. Cu toate acestea, trebuie remarcat faptul că, în codul de exemplu, schimbarea directă char inCstring[20]; la char* inCstring; provoacă o eroare de segmentare. –  > Por Vicente Cunha.
  • Și încercând liniile char* inCstring; inCstring = str.c_str(); produce o eroare de conversie invalidă de către compilator. –  > Por Vicente Cunha.
amol_Dee_sandwich

Așa că mi-am dat seama de două modalități de a realiza acest lucru.
În primul rând, este important să rețineți că nu puteți atribui la un întreg array, ceea ce înseamnă că este necesar să specificați elementul din array la care să atribuiți. Încercarea de a atribui un șir de caractere unui array de caractere pur și simplu nu va funcționa din acest motiv.
Acestea fiind spuse, prin specificarea elementului, ar fi posibil să atribuiți un caracter într-un anumit element al unui array char.
Mai jos sunt prezentate două metode care realizează o „conversie” de la string la cstring(string la char array). Vă rugăm să consultați răspunsul lui Vincent pentru codul complet. Metoda B mi s-a părut mai bună, deoarece aș dori să am o dimensiune maximă a matricei de caractere.

Metoda A:

string str = "StackOverFlow";
const char* inCstring;
inCstring = str.c_str();

Metoda B:

string str = "StackOverFlow";
char inCstring[20]{};

Apoi folosiți strcpy

strcpy(inCstring, str.c_str());