2012-01-26 16 views

risposta

6

Si potrebbe fare questo, invece:

char *testvar = argv[0]; 

O forse:

char *testvar = strdup(argv[0]); 
/* Remember to free later. */ 

Come pmg note, strdup non è standard. L'implementazione utilizzando malloc + memcpy è un buon esercizio.

O anche:

char testvar[LENGTH]; 
if (strlen(argv[0]) >= LENGTH) 
    fprintf(stderr, "%s is too long!\n"); 
else 
    strcpy(testvar, argv[0]); 

Ma poi di nuovo si potrebbe essere alla ricerca di:

char testvar[] = "testvar"; 
1

Che sintassi è valida solo per inizializzare un array di char da un letterale, vale a dire quando si scrive in modo esplicito nel codice sorgente quali caratteri devono essere messi nell'array.

Se si desidera solo un puntatore ad esso (vale a dire "un altro nome" per riferirsi ad esso) si può fare:

char * testvar = argv[0]; 

se invece si desidera una copia di esso si deve fare:

size_t len = strlen(argv[0]); 
char * testvar = malloc(len+1); 
if(testvar==NULL) 
{ 
    /* allocation failed */ 
} 
strcpy(testvar, argv[0]); 
/* ... */ 
free(testvar); 
1

È necessaria una costante per inizializzare un oggetto. argv[0] non è una costante.
"foobar" sotto è una costante

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

int main(int argc char **argv) { 
    char array[] = "foobar"; /* array has 7 elements */ 
    char *testvar; 

    testvar = malloc(strlen(argv[0]) + 1); /* remember space for the NUL terminator */ 
    if (testvar != NULL) { 
     strcpy(testvar, argv[0]); 
     /* do something with testvar */ 
     free(testvar); 
    } else { 
     /* report allocation error */ 
    } 
    return 0; 
}