Установить строковую переменную в C из argv [1] - PullRequest
7 голосов
/ 26 января 2012

Я пытаюсь выучить C, и мне интересно, почему это не работает?

#include <stdio.h>

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

    return 0;
}

Ответы [ 3 ]

9 голосов
/ 26 января 2012

Вы можете сделать это вместо:

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";
2 голосов
/ 26 января 2012

Этот синтаксис действителен только для инициализации массива 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 голос
/ 26 января 2012

Вам нужна константа для инициализации объекта.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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...