01. oktober 2005 - 22:08
Der er
8 kommentarer og 1 løsning
kopi af string via pointer
Hej eksperter. Jeg skal i gang med c - og har lidt problemer med pointer-begrebet. Hvad går der galt for mig her? char *string = (char *)malloc(50 * sizeof(char)); void tmp(char *source) { while(*source != '\0') { *string++ = *source++; printf("\n%c", *source); printf("\n%c", *string); } } int main() { char *name = "Jasper"; tmp(name); return 0; }
Annonceindlæg fra DE-CIX
01. oktober 2005 - 22:11
#1
#include <stdio.h> #include <string.h> char *string; void tmp(char *source) { while(*source != '\0') { *string = *source; printf("\n%c", *source); printf("\n%c", *string); string++; source++; } *string = '\0'; } int main() { char *name = "Jasper"; string = (char *)malloc(50 * sizeof(char)); tmp(name); return 0; }
01. oktober 2005 - 22:13
#2
jeg har: 1) flyttet den dynamisk allokering ned i main 2) ventet med at inkrementere de 2 pointere i tmp indtil efter at værdierne er udskrevet 3) har sikret mig at string er nultermineret
01. oktober 2005 - 22:13
#3
jeg ville nok iøvrigt omdøbe string til destination omdøbe tmp til mycopy
01. oktober 2005 - 22:26
#4
Tusind tak for det hurtige svar - det var jo lige hvad jeg skulle bruge. hvad er fordelen ved at vente med allokering til main - kaldet? Læg lige et svar ;]
01. oktober 2005 - 22:28
#5
svar
01. oktober 2005 - 22:29
#6
malloc kald er en runtime ting og kan ikke laves i en compile time initialisering
01. oktober 2005 - 23:41
#7
Der en ingen problemer med: #include <stdlib.h> #include <iostream> int *p = (int *)malloc(123); int main() { std::cout << p << std::endl; } malloc bliver kaldt når programmet starter op, inden main().
01. oktober 2005 - 23:45
#8
ja - og ? C != C++
01. oktober 2005 - 23:47
#9
Ja, det er kun i C++ at det virker.
Kurser inden for grundlæggende programmering