unterschiedliche Compileroptionen bei malloc möglich?



  • wenn ich folgenden Code mit gcc (gcc (GCC) 3.3.3 (SuSE Linux)) kompiliere, ist alles okay:

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    
    int main (int argc, char * argv[])
    {
    	char * p;
    	char sz[] = "Hallo Welt";
    	p = malloc(sizeof(char[strlen(sz)]));
    	strcpy(p, sz);
    	printf("(%s)\n", p);
    
    	return 1;
    }
    

    Unter Windows VS 2003 bekomme ich die Fehlermeldung:

    e:\src_local\1st_malloc\1st_malloc.c(9): error C2057: Konstanter Ausdruck erwartet

    Hat jemand einen Tipp, was ich machen muss, damit ich den Code auch unter Windows kompilieren kann?



  • sizeof(char[strlen(sz)]) <- Komische Semantik. Mach doch lieber malloc( strlen(sz) + 1 ) , dann hast du auch gleich noch das Terminierungszeichen dabei 🙂



  • dann tuts auch 🙂



  • Hintergrund: GCC kann C99, MSVC nicht. In C99 ist es erlaubt, Arrays mit (zur Compilezeit) variabler Länge zu erstellen.

    Auch wenn hier kein wirkliches Array erstellt wird, hängt er sich an der Syntax auf. char[xxx] ist in C89 nur gültig, wenn xxx eine Compilezeit-Konstante ist.


Anmelden zum Antworten