Avatar billede dehdar Nybegynder
08. maj 2008 - 19:35 Der er 7 kommentarer og
1 løsning

strlen problemer

Er der nogen som kan forklare, hvorfor strlen(kopinavn) ikke er lig strlen(navn)? Hvordan løser jeg dette problem? :(

#include <iostream>
using namespace std;

void main()
{
    char navn[] = "martin";

    char* kopinavn = new char[ strlen(navn) + 1 ];

    cout << strlen(kopinavn) << endl;
    cout << strlen(navn) << endl;
}
Avatar billede arne_v Ekspert
08. maj 2008 - 19:45 #1
kopinavn er uinitialiseret og har derfor en "rilfaeldig" laengde

jeg tror at du mangler en

strcpy(kopinavn, navn);
Avatar billede arne_v Ekspert
08. maj 2008 - 19:45 #2
"tilfaeldig"
Avatar billede dehdar Nybegynder
08. maj 2008 - 21:01 #3
Tak for svaret

Jeg brugte strncpy(kopinavn, navn, x) hvor x var mindre end strlen(navn). Så dermed kan jeg nu konkludere at alle de reserverede/allokerede pladser skal initialiseres før strlen() returnerer end forventet værdi.
Avatar billede arne_v Ekspert
08. maj 2008 - 21:22 #4
Nu brugte du jo ikke strncpy i den kode du postede.

strncpy har en lille giftighed nemlig at hvis x <= strlen(navn), saa bliver
kopinavn ikke termineret ordentligt.

Hvis du f.eks. vil kopiere 3 tegn saa brug:

x = 3;
strncpy(kopinavn, navn, x);
kopinavn[x] = '\0';
Avatar billede arne_v Ekspert
08. maj 2008 - 21:25 #5
Du bruger C++. Medmindre du har gode grunde til at bruge C strenge (nul terminerede char
arrays), saa overvej brug af STL string. Svaerere at lave fejl med den.
Avatar billede dehdar Nybegynder
08. maj 2008 - 22:16 #6
Jep du har ret. STL har sine fordele, men eftersom vi ikke rigtigt er blevet introduceret for det på skolen, så har jeg holdt mig til det vi har lært. Det var ikke før et par uger siden at jeg begyndte at bruge STL vectors til implementering af grafnoder ( for at holde styr på edges) i stedet for linked lists og eller dynamiske arrays, og det gjorde altså livet meget nemmere.

Ovenstående eksempel er ikke en del af mit program, men blot et eksempel, som skulle synliggøre mit problem, det var derfor jeg nævnte strncpy :)

Du må gerne svare.
Avatar billede arne_v Ekspert
08. maj 2008 - 22:20 #7
STL string er forholdsvis "naturlig" at arbejde med. Jeg tror ikke at den vil
give dig problemer.

Og et svar.
Avatar billede arne_v Ekspert
08. maj 2008 - 22:21 #8
om igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester