/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Program fejl!
Fra : Morten


Dato : 02-12-01 15:21

Hej, jeg har et lille problem med et program som jeg har skrevet af
fra en bog. Jeg bruger MS Visual C++ 6.0.

Her er programmet uden kommentarer:

#include<stdio.h>
#include<stdlib.h>
char count, *ptr, *p;

main()
{
   ptr = malloc(35 * sizeof(char));
   if(ptr == NULL)
   {
      puts("Memory allocation error.");
      exit(1);
   }
   p = ptr;
   for(count = 65; count < 91; count++)
      *p++ = count;
   *p = '\0';
   puts(ptr);
   return 0;
}

Når jeg prøver at compile dette får jeg følgende error:
D:\...\Malloc\Malloc.cpp(7) : error C2440: '=' : cannot convert from
'void *' to 'char *'
Kan nogen hjælpe mig?

Hilsen Morten

 
 
Anders Borum (02-12-2001)
Kommentar
Fra : Anders Borum


Dato : 02-12-01 16:32

"Morten" <mozart@mobilixnet.dk> skrev i en meddelelse

[klip]

> char count, *ptr, *p;
>
> main()
> {
> ptr = malloc(35 * sizeof(char));

Hej Morten.

ptr har typen char* mens malloc returnerer void*. Derfor skal pointeren
typecastes. I standard-C vil en void-pointer normalt blive implicit
konverteret til en anden slags pointer og omvendt. Så det ser ud som om du
oversætter programmet med en C++-oversætter. Dette er egentlig ikke så
underligt da kildekoden ligger i filen Malloc.cpp. Omdøb evt. filen til
Malloc.c

Du kan under alle omstændigheder foretage denne typecasting eksplicit ved at
skrive:
ptr = (char*)malloc(35 * sizeof(char));

I C++ har man dog en lidt lækrere måde at allokere hukommelse på, så man
undgår eksplicit typecasting.
ptr = new char[35];

[klip]

> Når jeg prøver at compile dette får jeg følgende error:
> D:\...\Malloc\Malloc.cpp(7) : error C2440: '=' : cannot convert from
> 'void *' to 'char *'

[klip]




Mogens Hansen (02-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 02-12-01 18:19


"Morten" <mozart@mobilixnet.dk> wrote in message
>
> Når jeg prøver at compile dette får jeg følgende error:
> D:\...\Malloc\Malloc.cpp(7) : error C2440: '=' : cannot convert from
> 'void *' to 'char *'
> Kan nogen hjælpe mig?

Du har skrevet hvad der stort set ligner et lovligt C program men ikke et
lovligt C++ program.
Linien
main()
bør ændres til
int main(void)

Du skal derfor sikre dig at du oversætter det som et C program.
Sørg f.eks. for at source-filen gemmes med extension .c.

Alternativt kan du lave det om til et C++ program ved at ændre
ptr = malloc(35 * sizeof(char));
til
ptr = static_cast<char*>(malloc(35 * sizeof(char)));


Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste