Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 20:01 Der er 12 kommentarer og
1 løsning

Lægge to strenge sammen !!

Hej alle, jeg har haft et problem kørende under følgende spg. :
http://www.eksperten.dk/spm/126151

Men nu kan jeg se at det er blevet til et c/c++ spørgsmål.. Nå men jeg skal have lagt en streng sammen med en anden, noget ligende dette :
....
char tmpbuf[] = \"noget\";
char *query;
query =\"DELETE FROM notfound WHERE s_word =\";
int tmpbufL = sizeof(tmpbuf);
int i = 0;
int o = 36;
while(i<tmpbufL)
{
query[o] += tmpbuf[i];
o++;
i++;
}
.....
ELLER :

char *destquery = strcat(query, tmpbuf);

Men det virker ikke mit prg. compileres, men laver fejl.. Jeg programmerer i Linux, med g++ - compiler !
Avatar billede futter2 Nybegynder
29. oktober 2001 - 20:06 #1
char str1[] = \"Hello\";
char str2[] = \"World\";
...
strcat (str1, str2);
...
...
efterfølgende vin der i str1 stå \"HelloWorld\"

Avatar billede goz Nybegynder
29. oktober 2001 - 20:29 #2
Til nogle ting kan sprintf også anbefales.

char str1[] = \"Hello\";
.
.
str2 = sprinf(\"%sWorld\")

giver det samme altså
\"HelloWorld\"
men har alle printf\'s muligheder for streng formateing.

Avatar billede mickni33 Nybegynder
29. oktober 2001 - 21:52 #3
prøv dette strcat først de to strenge, og kopier den derefter over i destquery.

char *destquery ;
strcpy(destquery,strcat(query, tmpbuf));

Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 08:31 #4
Det er meget mærkeligt, da alle eksemplerne godt vil kompileres. Men når jeg kører mit program, laver det en core-dump... Hvad skal man dog gøre !!!
Avatar billede mickni33 Nybegynder
30. oktober 2001 - 08:53 #5
prøv at lave nogle cout<< eller printf() om du vil, ind imellem linierne feks kunne du skrive før strcat() at printf(\"dette er før strcat\") på den måde debugger du og kan se hvor programmet springer ud . hvis nogle af sætningerne ikke bliver udskrevet er det altså der det går galt. Nogle gange er det slet ikke det sted der er fejl som man først tror
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:08 #6
hmmm.. Nix det gav :(runtime)
....
tmpbuf :RigtigStorMecedesBil
tmpbufL :21
før strcat
Segmentation fault (core dumped)
...
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:27 #7
OKAY !!! DETTE HER VIRKER !!

char tmpbuf[] = \"RigtigStorMecedesBil\";
char querystr[] = \"DELETE FROM notfound WHERE s_word =\";
char *query;
int tmpbufL = sizeof(tmpbuf);
cout<<\"tmpbuf :\"<<tmpbuf<<endl<<endl;
cout<<\"tmpbufL :\"<<tmpbufL<<endl<<endl;
int queryL = sizeof(querystr);
cout<<\" queryL :\"<<queryL<<endl<<endl;
char *destquery;
cout<<\"før strcat \"<<endl<<endl;
destquery = strcat(querystr, tmpbuf);
cout<<\"efter strcat, før Cout\"<<endl<<endl;
cout<<\"QUERY TEXT : \"<<destquery<<endl<<endl;
cout<<\"efter Cout\"<<endl<<endl;


Mickni33> du får ½ point for hjælpen !!
Avatar billede mickni33 Nybegynder
30. oktober 2001 - 09:29 #8
De er sku meget gode de der cout<<
Men hvad var der galt
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:29 #9
nåå nej dat kan man ikke... :o) DU får point
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:31 #10
ja jeg ikke man kan concatenate en char* og en char[].... ??
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:32 #11
hovsa ! jeg mente vist : \"jaaa... jeg tror ikke man kan......\"
Avatar billede mickni33 Nybegynder
30. oktober 2001 - 09:33 #12
Nå det lyder mystisk for det er jo det samme. Men det kan være det virker på en borland compiler, det kan man godt komme ud for
Avatar billede soepro Nybegynder
30. oktober 2001 - 10:37 #13
Husk blot at strcat og strcpy begge kræver at modtage variablen er STOR NOK (dvs. der er allokeret NOK bytes) til at indeholde resultatet. Hverken strcat eller strcpy checker selv om slutningen på modtagefeltet er nået.

strncat(dest, src, sizeof(dest)-strlen(dest)-1);
strncpy(dest, src, sizeof(dest)-1);

er \"bullet-proof\". (-1 aht. \'\\x0\' termineringen.)

Du kan gøre tilsvarende med sprintf:

strcat: sprintf(dest´+strlen(dest), \"%.*s\", sizeof(dest)-strlen(dest)-1, src);
strncpy: sprintf(dest, \"%.*s\", sizeof(dest)-1, src);

Vær i øvrigt opmærksom på at sizeof(dest) kun giver 4 hvis dest er defineret som char *dest eller char dest[], fordi det så blot er en pointer. (Hvorimod char dest[20] vil give sizeof() = 20.)
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