我想學習C,我想知道爲什麼這不起作用?從argv設置字符串變量C [1]
#include <stdio.h>
int main(int argc, char *argv[])
{
char testvar[] = argv[0];
//do something with testvar
return 0;
}
我想學習C,我想知道爲什麼這不起作用?從argv設置字符串變量C [1]
#include <stdio.h>
int main(int argc, char *argv[])
{
char testvar[] = argv[0];
//do something with testvar
return 0;
}
你可以這樣做,而不是:
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";
這句法只適用於從文字,即初始化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);
您需要一個常量來初始化一個對象。 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;
}