struct casten?



  • #include <stdio.h>
    #include <string.h>
    struct test
    {
    	int i;
    	char text;
    };
    int main()
    {
    	test myTest;
    	printf("number?\nword?\n");
    	scanf("%d",&myTest.i);
    	scanf("%s",&myTest.text);
    	char* data = NULL;
    	data = new char [sizeof(test)];
    	memset (data, 0, sizeof(test));
    	memcpy(data, (void*)myTest, sizeof(test)) ;
    	printf("-------\n");
    	for(int x = 0;x<myTest.i; x++)
    	{
    		printf(data);
    		printf("\n");
    	}
    	printf("-------\n");
    
    }
    

    ->

    E:\Uni\code\test.cpp(17) : error C2440: 'type cast' : 'struct test' kann nicht in 'void *' konvertiert werden
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    

    wie kann ich das denn nu casten?



  • &myTest

    Dir ist aber schon klar, dass das kein C ist?



  • ach das is schon c++ ?
    wie würde man das denn in c machen`?



  • pixartist schrieb:

    ach das is schon c++ ?
    wie würde man das denn in c machen`?

    Statt new verwendet man in C malloc() und statt delete (was bei dir fehlt (!)) free().

    Gruß Caipi



  • struct test
    {
    int i;
    char text;
    };

    scanf("%s",&myTest.text);

    ist totaler Murks.

    Entweder

    char text;
    scanf("%c",&myTest.text); für ein Zeichen oder

    char text[100];
    scanf("%s", myTest.text); für einen Text.

    data = new char [sizeof(test)]; macht genauso wenig sind. Warum sizeof(test) und nicht strlen(myTest.text) + 1.



  • weil sizeof test die grösse der struktur test ist?
    des weiteren funktioniert das mit dem text



  • Und was soll man mit der Größe der Struktur, wenn man ein char Array anlegt? Du brauchst die Größe des Strings ..

    "des weiteren funktioniert das mit dem text " Nur weil es zu funktionieren scheint, heißt es noch lange nicht, dass es richtig ist. Vielleicht habe ich auch einfach was übersehen, aber wenn nicht, dass ist dein Code da oben "Mist" und funktioniert nur aus purem Zufall.



  • MFK schrieb:

    &myTest

    Dir ist aber schon klar, dass das kein C ist?

    Bitte? Dir ist schon klar, dass es sich hier um den Adress Operator und nicht um eine Referenz handelt?

    pixartist schrieb:

    des weiteren funktioniert das mit dem text

    Ja, aber nur so wie feigling es macht, und nicht wie du es machst. Schlag mal nach, was "undefiniertes Verhalten" in C bedeutet. Wobei die Version von feigling auch noch verbesserungswürdig ist. Hier wäre die Verwendung von fgets wohl angebracht.



  • groovemaster schrieb:

    MFK schrieb:

    Dir ist aber schon klar, dass das kein C ist?

    Bitte? Dir ist schon klar, dass es sich hier um den Adress Operator und nicht um eine Referenz handelt?

    Bitte? Dir ist schon klar, dass ich nicht das & meine, sondern das new?

    😉



  • MFK schrieb:

    Bitte? Dir ist schon klar, dass ich nicht das & meine, sondern das new?

    Nee, war mir nicht klar, da du immerhin deine Bemerkung nach "&myTest" geschrieben hast und aus deinem Beitrag keinerlei Bezug zu new hervorgeht. 😉



  • mit (void*)&myTest.
    und wie "feigling" bereits schrieb, char text funktioniert nicht. nimm stattdessen char text[256] oder so.


Anmelden zum Antworten