Строка C становится нулевой - PullRequest
1 голос
/ 12 января 2012

Я учусь получать аргументы в C, однако, когда я запускаю приведенный ниже код со следующим вводом, первый становится нулевым.

Ввод: ./a.out a b c d e f g h i j k

Выход: (null) b c d e f g h i j k

#include <stdio.h>

    int main(int argc, char *argv[])
    {
        int i = 2, j = 0;
        char *foo = argv[1];
        char *bar[10];
        while(j < 10 && i < argc)
        {
            bar[j++] = argv[i++];
        }
        bar[j] = NULL;

        printf("%s ", foo);
        for(j = 0; bar[j] != NULL; j++)
        {
            printf("%s ", bar[j]);
        }
        printf("\n");

        return 0;
    }

Ответы [ 3 ]

5 голосов
/ 12 января 2012

В конце цикла вы пишете NULL в bar[10], но вы выделили только bar[0 - 9].Это, вероятно, перезаписывает foo.

4 голосов
/ 12 января 2012

Вы устанавливаете бар [10] в NULL в конце цикла, но он поднимается только до бара [9]. Поскольку foo размещается сразу после bar в стеке, вместо этого bar [10] = NULL перезаписывает foo.

0 голосов
/ 12 января 2012

Попробуйте

while (--argc) ставит (* ++ argv);

...