Gå til innhold

Array/ peker problem..


Anbefalte innlegg

Hvorfor går ikke dette? (Vil printe ut 3 og 5)

#include <string.h>

void main()
{
int DP[2];
void *Msg[2];
DP[0] = 3;
DP[1] = 5;

sprintf(&Msg[0],"%d",DP[0]);
sprintf(&Msg[1],"%d",DP[1]);

printf("%d\n",Msg[0]);
printf("%d",Msg[1]);
}

 

Får bare ut et kjempestort talll.. (Minnelokasjon?)

Endret av EirikO
Lenke til kommentar
Videoannonse
Annonse

Jeg er veldig overrasket over at programmet ikke kræsjer til helvete....

 

Du skriver til et minneområde som ikke er initsialisert, og deretter skriver du ut pekeren til dette minneområdet.

 

Du vil heller ha en char* framfor void*, og deretter allokere dem med new eller malloc.

C++ konverterer mellom void* og char* automatisk.

Lenke til kommentar
Jeg er veldig overrasket over at programmet ikke kræsjer til helvete....

 

C++ konverterer mellom void* og char* automatisk.

9083535[/snapback]

Oki. Takker.

Bruker forøvring C, men det har vel ikke så mye å si..

Lenke til kommentar

Hva blir galt nå da?

Printer ut 51 og 53...

 

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

void main()
{
int DP[2];
char *Msg;
Msg = malloc(2*sizeof(int));

DP[0] = 3;
DP[1] = 5;

sprintf(&Msg[0],"%d",DP[0]);
sprintf(&Msg[1],"%d",DP[1]);

printf("%d\n\n",Msg[0]);
printf("%d\n",Msg[1]);
}

 

Tilleggsspørsmål:

Hvordan kan jeg legge flere siffer inn på en plass i arrayet?

Vil at det skal ende opp omtrent slik:

Msg[0] = 436

Msg[1] = 3

Nå virker det som at jeg bare får første siffer..

Endret av EirikO
Lenke til kommentar
Hva blir galt nå da?

Printer ut 51 og 53...

 

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

void main()
{
int DP[2];
char *Msg;
Msg = malloc(2*sizeof(int));

DP[0] = 3;
DP[1] = 5;

sprintf(&Msg[0],"%d",DP[0]);
sprintf(&Msg[1],"%d",DP[1]);

printf("%d\n\n",Msg[0]);
printf("%d\n",Msg[1]);
}

 

Tilleggsspørsmål:

Hvordan kan jeg legge flere siffer inn på en plass i arrayet?

Vil at det skal ende opp omtrent slik:

Msg[0] = 436

Msg[1] = 3

Nå virker det som at jeg bare får første siffer..

9087651[/snapback]

 

For det første allokerer du Msg som to int i stedet for to char, dvs. at du allokerer 8 bytes og ikke 2, og når C ser f.eks. +-operatøren vil den addere 4 og ikke 1 til pekeren.

 

Det andre som er galt er sprintf-uttrykket. Den tar en formatstreng og eventuelle ekstra variabler, akkurat som printf og lager en streng i minnet. Slik jeg ser det prøver du å ha to strenger for hvert tall i én array. (Hvorfor ikke bruke to?) Da må du huske at strengen "3" representeres av to char-elementer: ASCII-koden for tallet 3, og sluttkoden \0. To strenger med de to tallene dine tar altså opp fire bytes hver. Noe du også gjør feil er å gi adressen til elementene DP[0] og DP[1] i DP som pekere til sprintf. Du trenger ikke noen & foran.

 

Det siste er at du prøver å printe de to strengene (med hvert sitt tall) som tall, og ikke strenger. Grunnen til at du da får 51 og 53 er at tallet 3 har ASCII-kode 51 mens 5 har ASCII-kode 53. Når du sier til printf at du vil printe et tall og ikke en streng, vil printf tolke den slik, og da er det liten vits i å konvertere til en streng med sprintf. Jeg antar du mente "%s" i formatstrengen til printf?

 

Uansett, en kode som fungerer:

 

CODE

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

int DP[2];

char *Msg;

Msg = (char*)malloc(sizeof(char) * 4);

 

DP[0] = 3;

DP[1] = 5;

 

sprintf(&Msg[0],"%d",DP[0]);

sprintf(&Msg[2],"%d",DP[1]);

 

printf("%s\n\n",&Msg[0]);

printf("%s\n",&Msg[2]);

}

 

Når det gjelder det siste du spør om, er jeg ikke helt sikker på hva du mener, men følgende går i alle fall ikke:

 

Msg[0] = 436

 

Msg er definert til å peke til elementer av typen char, og en char er 1 byte, som bare kan holde verdier mellom 0 og 255 (eller -128 og 127.)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...