Strenge i C

Tags:    c++

Hej, jeg har en array af charpointere som opfører sig besynderligt.

Jeg har implementeret funktion SortFileString() som en funktion der tager imod en streng, sorterer i denne og lægger de frasorterede værdier ned i et array af charpointere.
Sorteringen er korrekt hvis jeg udskriver variable inde i funktionen, men når jeg udskriver dem efter funktionen har udført, altså umiddelbart nedeunder ligger der snask i den ene af strengene. Jeg fatter det simpelthen ikke. Hvorfor ændrer strengen sig når jeg printer den fra et andet sted????

Her er den kode jeg har lavet :

void SortFileString(char str[],char* results[])
{

int ctr=0;
char tempstr[255],tempstr1[255],tempstr2[255];
strcpy(tempstr,str);

strcpy(tempstr1,strrchr(tempstr,'|')+1);
tempstr[strlen(str)-strlen(strrchr(str,'.'))]='\\0';
strcpy(tempstr2,tempstr);


results[0]=tempstr1;
results[1]=tempstr2;
printf("***%s - %s***\\n",results[0],results[1]);
}

int main()
{
char* filestr[5];
SortFileString("filnavn.ext|12345",infoArray);
return 0;
}




7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Det er fordi at tempstr1[255],tempstr2[255] egentlig bliver slettet når funktionen er slut. Derfor bliver du nød til at allokere ny hukommelse, og så lægge dataene der. (Denne allokering vil dog ikke automatisk blive slettet af programmet.)



/AC



Og du har deklareret infoArray således?
Fold kodeboks ind/udKode 




/AC



Og du har deklareret infoArray således?
Fold kodeboks ind/udKode 




/AC


Jepper..En lille rettelse til koden : Således er den :

// strenge.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string.h>
#include <stdio.h>


void SortFileString(char str[],char* results[])
{

int ctr=0;
char tempstr[255],tempstr1[255],tempstr2[255];
strcpy(tempstr,str);

strcpy(tempstr1,strrchr(tempstr,'|')+1);
tempstr[strlen(str)-strlen(strrchr(str,'.'))]='\\0';
strcpy(tempstr2,tempstr);


results[0]=tempstr1;
results[1]=tempstr2;
printf("***%s - %s***\\n",results[0],results[1]);
}

int main()
{
char* infoArray[5];
SortFileString("filnavn.ext|12345",infoArray);
printf("***%s - %s***\\n",infoArray[0],infoArray[1]);
return 0;
}




Det virker hos mig:

>test
***12345 - filnavn***
***12345 - filnavn***


/AC



Det virker hos mig:

>test
***12345 - filnavn***
***12345 - filnavn***


/AC

Hva!?!? Det gir jo ingen mening...
Hos mig gir det følgende output :

***12345 - filnavn***
***12345 - ┤ⁿ↕***

Altså snask når der blir udskrevet udenfor funktionen



I stedet for

Fold kodeboks ind/udKode 


så prøv

Fold kodeboks ind/udKode 



/AC



I stedet for

Fold kodeboks ind/udKode 


så prøv

Fold kodeboks ind/udKode 



/AC


Det virker sørme...Okay, new char. Hvorfor er det smart at skrive det der? Det er jo ikke et nyt objekt der blir lavet??



t