Simonsenpg: Alle arrays (dermed også text arrays, eller strenge) bliver referet til ved hjælp af en pointer. ved at skrive: char navn[20] = kunde[2].navn;
gemmer du kunde[2].navn's pointer i navn[].. det vil sige at navn[] ikke indeholder tekstrengen men peger på kunde[2].navn.. derfor kan du ikke sammenligne dem med strcmp().. soepro's løsning er korrekt :-). Jeg ville dog nok oprette navn[20] dynamisk så du er sikker på at der altid er plads nok.. noget ala:
såvidt jeg kan se underlader du at kopiere \0 med.. hvilket vil bevirke at en rutine som printf() vil læse videre når strengen er slut.. strenge er nul termineret i C.. men det vil da virker hvis kunde[2].navn er mindre end 20 chars og navn er clearet til nul inden brug..
arne v: så skidt da *g* malloc(length+1).. ya happy now? *g*
simonsenpg: thats right.. well hvis du gør som jeg har foreslået (med arnes +1 *g*) skulle det virke.. men det kommer selvfølgelig an på sammenhængen du bruger det i.. går ikke udfra at du (som skrevet her) vil kopiere en streng og sammenligne den i samme funktion.. så er du jo ligesom sikker på at begge strenge indeholder det samme.. og hvorfor så sammenligne *s*.. har lige luret den thread som denne her var en forsættelse af.. kunde navn var erklæret sådan her:
char Navn[256];
well.. så forstår jeg ikke dit oprindelige spørgsmål.. for Kunde[2].Navn ER et char array :-)..
Jeg gætter på at det du vil er at finde en kunde udfra et navn som er indtastet et andet sted i programmet?
fint nok.. du har dit Kunde[] array initialiseret og det hele.. du har læst en streng ind i Navn[20] (som du nok bør gøre ligeså lang som kunde.navn[] eller allokere dynamisk).. hvis begge strenge er nul terminerede (slutter med et 0) kan du bare bruge strcmp
// gennemløber alle kunder for at finde det indtastede navn int index; for( index = 0; index < ANTAL_KUNDER; index++ ) { if( strcmp(Navn, Kunde[index].Navn) ) { // yeps kunde med Navn er fundet i array på plads index, // gør eller andet ved ham her :-) } }
int length = strlen(Kunde[2].navn); char *navn = (char *) malloc(length+1); memset(navn,0,length); //overflødigt i dette exemple da vi kun alloc'er precis plads. strcpy(navn, Kunde[2].navn);
smokes >> Ifølge min on-line help, sætter strncpy() funktionen altid selv '\x0' til sidst. size angiver det maskimale antal betydende tegn der må kopieres - derfor sizeof()-1.
Hvis der er det maksimale antal tegn bliver der ikke sat en nul byte ind efter.
Men hvis der er færre bytes, så bliver der sat en nul byte ind.
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.