26. august 2002 - 10:29Der er
3 kommentarer og 1 løsning
kopier string til string (ANSI C++)
Hvordan kan jeg kopierer en del af en string til en string i ANSI C++
Hvis jeg feks har disse 2 variabler char navn[8]; char alder[8]; strcpy(navn, "Henry"); strcpy(alder, "48");
og jeg har kopieret dem til en string ved at gøre sådan: char* tmp; tmp = new char[sizeof(navn)+sizeof(alder)]; strcpy(tmp, navn); strcat(tmp, alder);
Hvordan kopierer jeg så den data tilbage igen til navn / alder? Det er jo nemt nok med navn ... der kan man bruge strcpy men strcpy tager ikke noget offset eller lign... findes der en lign function som tager offset som argument ? ... Eller skal jeg selv skrive en funktion til det ?
Hvor kom New fra - der skal stå 'Nej' (du skal ikke selv lave en funktion.)Ovenstående kræver selvfølgelig at navn rent faktisk indeholder 8 tegn - ellers vil alder jo ikke starte 8 tegn inde i tmp. Hvis du vil være helt sikker, skal du indsætte et separatortegn mellem navn og alder, sådan at du har noget at "dele" strengen med. Du kan anvende sprintf() til begge dele:
sprintf(temp, "%*.*s;%*.*s", sizeof(navn-1), sizeof(navn)-1, navn, sizeof(alder)-1, sizeof(alder)-1, alder); // tmp indeholder nu f.eks. "Hans;23"
// Så splitter vi strengen igen vha. ';' sprintf(navn, "%.*s", sizeof(navn)-1, strtok(tmp, ";")); sprintf(alder, "%.*s", sizeof(alder)-1, strtok(NULL, ";"));
Fandt entligt ud af at man kan gøre det på den her måde men din ide er faktisk ganske udemærket jeg er bare ikke glad for delimiters, har engang brugt den løsning men der opstod problemer.
class PacketLogin : public packet { private: char* uname; char* passw; public: PacketLogin(char* name, char* pass) { ID = 1; uname = new char[strlen(name)]; passw = new char[strlen(pass)];
Man skal så lige huske på at passw & uname skal være af bestemt/kendt størrelse når man deserialiserer ellers går det galt hvis ikke man kender størrelsen af dem så er din metode jo helt eminent. Har jeg ret ?
memcpy og strncpy virker på mange måder ens - strncpy stopper blot ved første '\x0' - så jo du har ret.
Synes godt om
Ny brugerNybegynder
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.