Errore incomplete type

di il
3 risposte

Errore incomplete type

Ciao a tutti,
ho scritto questo breve codice
#include <stdio.h>

char *memCpy(void *s1, const void *s2, size_t n);

int main() {

	char *string = "ciaociao";
	char v[20];

	printf("%s\n", memCpy(v,string,5));

	return 0;
}

char *memCpy(void *s1, const void *s2, size_t n) {
	
	size_t i;

	for (i = 0; i < n; i += 1, s1++ , s2++)
		*s1 = *s2;
		
	return s1;
}
ma ho un errore in fase di compilazione
8.32.c:20:7: error: incomplete type 'void' is not assignable
                *s1 = *s2;
                ~~~ ^
1 error generated.
ho capito che il problema sia il void ma non riesco a risolverlo

3 Risposte

  • Re: Errore incomplete type

    Usa un casting.
  • Re: Errore incomplete type

    Void * non specifica il tipo di dato puntato e quindi non è possibile conoscere la dimensione del dato (a differenza ad esempio di un char * che è 1 byte, un int * che è 4 byte ...).
    Quindi con
    *s1 = *s2;
    il compilatore non sa quanti byte devono essere copiati.
    Suppongo che ti dia errore poi anche su s1++ ed s2++ perché non è possibile sapere di quanti byte avanzare.
    Il cast che ti suggerisce giustamente Çlÿkÿ~ serve a specificare quanti byte copiare e quindi devi scrivere qualcosa del genere, secondo me:
       unsigned char *p1 = (unsigned char *)s1;
       unsigned char *p2 = (unsigned char *)s2;
       for (i = 0; i < n; i += 1, p1++ , p2++)
          *p1 = *p2;
    
  • Re: Errore incomplete type

    Grazie 1000
Devi accedere o registrarti per scrivere nel forum
3 risposte