2012-01-26 63 views
5

我想學習C,我想知道爲什麼這不起作用?從argv設置字符串變量C [1]

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    char testvar[] = argv[0]; 
    //do something with testvar 

    return 0; 
} 

回答

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 testvar[] = "testvar"; 
1

這句法只適用於從文字,即初始化char陣列,當你明確地寫在源代碼中必須將哪些字符放入數組中。

如果你只是想它的指針(即「另一名」來稱呼它),你可以這樣做:

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

您需要一個常量來初始化一個對象。 argv[0]不是一個常數。
"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; 
}