Avatar billede hotmoller Nybegynder
01. december 2003 - 19:13 Der er 4 kommentarer og
1 løsning

pointere og strcpy

Hej...

Jeg er ret ny i c-programmeringens svære kunst, og har derfor et velnok ret simpelt problem, som jeg ikke selv kan løse.

Jeg har forsøgt at teste funktionen "strcpy" fra C standarbibliotek, for at få forståelse for brug af standard-funktioner, og også brug af pointere

min kode ser ud som følger:


# include <stdio.h>
# include <string.h>



int main(void){

    char str1[] = "dette er str1";
    char str2[] = "dette er str2";

    printf("str1 før cpy: %s\n", str1);
    printf("str2 før cpy: %s\n", str2);
   
    strcpy(str1, str2);
                 
    printf("str1 efter cpy: %s", str1);

    char* str1_ptr = "dette er str1_ptr";
    char* str2_ptr = "dette er str2_ptr";

    strcpy(str1_ptr, str2_ptr);
   

// NB! her crasher programmet, så nedenstående       
// linie bliver aldrig udskrevet
   
    printf("str1_ptr efter cpy: %s", str1);

    getchar();

    return 0;

}


Jeg kan kompilere filen uden problemer - men når jeg kører programmet crasher det før det sidste printf() statement.

Er der nogen der kan forklare mig, hvad det er galt?!
Avatar billede arne_v Ekspert
01. december 2003 - 19:23 #1
char* str1_ptr = "dette er str1_ptr";

ligger "dette er str1_ptr" i readonly memory og lader pointeren
str1_ptr pege på den.

Når så du forsøger at skrive til det som str1_ptr1 peger på
i readonly memory, så ....
Avatar billede hotmoller Nybegynder
02. december 2003 - 12:42 #2
jeg har forsøgt at finde noget om readonly memory i min bog, men uden held.

Har jeg forstået det rigtigt - at der kun allokeres hukommelse ved følgende assignment hvor der indgår et array: fx.

    char streng_arr = "hej KBH";

Men ikke når jeg forsøger mig med pointeren:

    char* streng_ptr = "Hej Aarhus";


Arne, ved du hvor jeg kan læse om dette henne?!
Vil du mene det er for tidligt at give sig i kast med dette, når man er newbie?!

På forhånd tak!
Avatar billede arne_v Ekspert
02. december 2003 - 12:53 #3
En computer med virtual memory (Windows, Linux og de fleste andre
operativ systemer) har forskellige typer af pages i memory:

pages med memory : readonly
pages med variable : read & write
pages med kode : executable

char streng_arr[] = "aaa";

ligger 4 bytes i #2.

char *streng_ptr = "bbb";

ligger for de fleste moderne compilere 4 bytes i #1.

Jeg ved egentligt ikke hvor man læser om sådan noget. Hvis du går igang
med assembler programmering, så lærer du det the hard way !

Jeg vil isge at du ikke behøver at forstå så meget om hvorfor, men
have en forståelse for at en pointer og et array kan bruges på
næsten samme måde, men at der er forskel.
Avatar billede arne_v Ekspert
02. december 2003 - 12:54 #4
pages med konstanter : readonly

:-)
Avatar billede hotmoller Nybegynder
02. december 2003 - 22:57 #5
Mange tak hjælpen!!!
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