Avatar billede fritz-79th Nybegynder
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;
}
Avatar billede arne_v Ekspert
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;
}
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
01. oktober 2005 - 22:13 #3
jeg ville nok iøvrigt

omdøbe string til destination

omdøbe tmp til mycopy
Avatar billede fritz-79th Nybegynder
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 ;]
Avatar billede arne_v Ekspert
01. oktober 2005 - 22:28 #5
svar
Avatar billede arne_v Ekspert
01. oktober 2005 - 22:29 #6
malloc kald er en runtime ting og kan ikke laves i en compile time initialisering
Avatar billede bertelbrander Novice
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().
Avatar billede arne_v Ekspert
01. oktober 2005 - 23:45 #8
ja - og ?

C != C++
Avatar billede bertelbrander Novice
01. oktober 2005 - 23:47 #9
Ja, det er kun i C++ at det virker.
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