Целое число командной строки, изменяющее значение? - PullRequest
1 голос
/ 13 октября 2019

Я сейчас пытаюсь разобрать два аргумента из командной строки: строку и int. Я пытаюсь сделать этот анализ без использования встроенных парсеров, таких как getopt или argp. Я понял, как правильно проанализировать строку, но когда я анализирую int, он меняет значение? Я не уверен, почему это происходит. Вот мой код:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char* filename;
    int prefix;
    int x;
    for(x = 0; x < argc; x++)
    {
        if(x == 1)
        {
            filename = argv[x];
        }
        if(x == 2)
        {
            prefix = *argv[x];

        }
    }
    printf("%s\n", filename);
    printf("%d\n", prefix);
}

Когда я передаю аргументы: имя файла 70

Он выведет: имя файла 55

Почему он меняет мое значение типа intэто? Я проверил это с различными значениями, и я заметил, что это даже не согласованное значение смещения. Как я могу исправить это, чтобы правильно проанализировать мой int? Спасибо.

1 Ответ

4 голосов
/ 13 октября 2019

Ваш параметр (70) является строкой. Когда вы делаете:

prefix = *argv[x];

, вы конвертируете символ (7) в целое число. Это даст вам значение ASCII 7, равное 55. Сделайте следующее изменение. Это преобразует строку в целое число.

prefix = atoi(argv[x]);

atoi является ASCII в целое число

...