Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

een lege Char* in C++

None
12 antwoorden
  • Hoi,

    Ik wel een lege char * hebben in C++ (unix,gcc) maar als ik bv zo:
    char *ik = NULL;
    een lege maak krijg ik gezeik dat dit niet mag van de ansi-standaard :roll:
    Dat is heel iritant in bv:

    char *bla;
    char *bla2;

    bla2 = "boe";
    sprintf(bla, "%s%s", bla, bla2);

    bla2 returneerd dan iets als $^&#%^*&%gv54rt3.boe
    En dat is zwaar onhandig

    Weet iemand hoe ik dit kan vermijden? evt door iets anders als sprintf (graag zelfs!!! )

    Bedankt,
    Barry
  • [code:1:e5bddfd50c]
    int main(void){
    char* str0;
    char* str1="blaat";

    strcpy(str0,"");

    printf("%s
    ",str0);
    printf("%s
    ",str1);

    strcat(str0,str1);

    printf("%s
    ",str0);

    return 1;
    }
    [/code:1:e5bddfd50c]


  • Zoals ik al zei, in C++ kun je geen definities opgeven dus
    char *bla = "\0";
    kan niet :evil:
  • [quote:ecb0e5b057="phaas"]Zoals ik al zei, in C++ kun je geen definities opgeven dus
    char *bla = "\0";
    kan niet :evil:[/quote:ecb0e5b057]
    Yep, zoals je kan zien heb ik het al aangepast. Je kunt met strcpy() en strcat() alleen gebruik maken van niet constant char*.
  • Ik ben nog niet zo ver in C++, maar is het nou te simpel geredeneerd dat een "lege char" gewoon een char is met ascii waarde 0 (nul)?
    Ik ga er van uit dat een char hier 1 character is (bv een A).
    Als een char in dit geval een string is, dan heb ik niks gezegd.
  • Dit is een fijn overblijfsel van de taal C. Jullie hebben even wat uitleg nodig.

    In C kent men geen strings. Wil je toch een string hebben zul je een char moeten gebruiken. C ondersteunt echter alleen het call by reference mechanisme, dit is een mechanisme dat bepaalt hoe variablen tussen verschillende geheugenblokken (scope, bereik) wordt overgebracht.

    C zet niet de waardes van een variable op de stack, maar een pointer(reference). Hier merk je niks van tijdens het programmeren, maar nu even wel. Het gevolg is namelijk dat je intern een pointer naar een character krijgt, wat een String voorstelt.

    Als je die lege string dus uitprint, krijg je een zooi onbegrijpelijke code, je print namelijk niet de WAARDE (value) maar het ADRES(reference) uit.

    Zo, nu mogen jullie het zelf uitzoeken :P
  • Goh nu snap ik er nog minder van :roll:
  • Ik heb het even nagekeken.
    C kent geen strings maar arrays van characters.
    C++ kent wel strings.
    Het einde van een char-reeks wordt in C aangegeven met een NUL-char..
    De basic-string implementatie van C++ slaat de stringlengte op.
    Definitie lege string in C++: string s0;
    of: string s00=""

    Ik vermoed dat er in C wel zoiets zal zijn als CHAR(0) voor 1 leeg char.
  • #include <iostream>

    using namespace std;

    void main()
    {
    char *bla = "piet";
    char *bla2 = NULL;
    cout << bla << endl;
    cout << bla2 << endl;
    }

    Veel plezier ermee
  • En hoe voeg ik nou bv een gewoon 'char' toe aan een char* ???
    bv:
    char *bla1 = "piet";
    char bla2 = 'a';

    maar hoe word bla2 dan bij bla1 opgeteld?
    ik heb al div. dingen geprobeerd, maar ik krijg alleen maar segfaults :(

    Barry
  • Tja, je kunt dan het beste een array gebruiken. Het statement
    char *bla = "piet" betekent : sla het adres van de string piet op in een pointer , in dit geval bla. Je kunt deze vervolgens niet wijzigen. Stel je voor dat je de inhoud een willekeurig adres zou kunnen veranderen. Wat een puinhoop zou dit worden. Jouw segfaults zeggen volgens mij: nee meneer, u mag de inhoud van dit adres niet wijzigen.

    Wil je echter toch een string wijzigen, dan zou je het met een array kunnen doen:

    #include <iostream>
    #include <string>

    using namespace std;

    void main()
    {
    const int MAX = 20;
    char bla[MAX];
    char bla2[MAX];

    strcpy(bla,"piet"); //kopieer de string piet naar
    //de array bla
    strcpy(bla2," is niet gek");

    strcat(bla,bla2); //voeg de inhoud van bla2 aan
    //bla toe

    cout << bla << endl;
    }


    De output van dit programma : piet is niet gek

    Een andere manier om een array van inhoud te voorzien is :

    char bla[MAX] = {"piet");

    Veel succes

    PS : Geen goed manual bij de hand?
  • met:
    char *boe = new char();
    char bla = 'b';

    boe = "boe";
    boe[4] = bla;

    Zo gaat alles perfect :? :lol:
    Hoe het komt weet ik ook niet ;)
    het zit um in dat = new char();

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.