2012-01-26 9 views

答えて

6

あなたが代わりにこれを行うことができます:

char *testvar = argv[0]; 

または多分を:

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

pmgとしてノート、strdupは標準ではありません。 malloc + memcpyを使ってそれを実装するのは素晴らしい演習です。

あるいは:

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

しかし、その後、再び、あなたが探しているかもしれない:構文が明示的に書くすなわちとき、唯一のリテラルからchar配列を初期化するために有効であることを

char testvar[] = "testvar"; 
1

ソースコード内でどの文字を配列に配置する必要があります。

あなたがちょうどあなたが行うことができ、それへのポインタ(それを参照すること、すなわち、「別の名前」)したい場合は:あなたはあなたがしなければならないことのコピーをしたいの代わり場合

char * testvar = argv[0]; 

を:

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

オブジェクトを初期化するには定数が必要です。 は定数ではありません。
"foobar"以下は定数です

#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; 
} 
関連する問題