私はC言語を学習しようとしていますが、なぜこれが機能しないのでしょうか?Cの文字列変数をargv [1]から設定します。
#include <stdio.h>
int main(int argc, char *argv[])
{
char testvar[] = argv[0];
//do something with testvar
return 0;
}
私はC言語を学習しようとしていますが、なぜこれが機能しないのでしょうか?Cの文字列変数をargv [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
配列を初期化するために有効であることを
char testvar[] = "testvar";
ソースコード内でどの文字を配列に配置する必要があります。
あなたがちょうどあなたが行うことができ、それへのポインタ(それを参照すること、すなわち、「別の名前」)したい場合は:あなたはあなたがしなければならないことのコピーをしたいの代わり場合
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);
オブジェクトを初期化するには定数が必要です。 は定数ではありません。
"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;
}