2016-11-27 7 views
0

Цезарь Сифер - Основное шифрование.Целое число принимает неправильное значение из stringv []

Я попрошу вашу помощь понять, почему переменная k получает отрицательное значение, даже если вторая командная строка (argv [1]) равна 3, например.

int main (int argc, string argv[]) 
{ 
    string text; 
    int k = 0; 

    do 
    { 
     printf("Type in a plain text:\n"); 
     text = GetString(); 

//k receives wrong value 
     k = (int) argv[1]; 

// Sanity check 
     printf ("argv[1] is %s and k is %d\n", argv[1], k); 
    } 
    while (k < 0); 
+0

'струна' нестандартный. См. [Ask] и укажите [mcve]. – Olaf

ответ

0

Что вам нужно сделать, вот conversion а не type-cast, поэтому тип-литье до int не поможет, вам необходимо преобразовать char * в int, используя библиотечную функцию, такую ​​как commonl y используется int atoi (const char *str), который определен в файле заголовка stdlib.h. Не забудьте сделать #include. !

Однако я бы предложил использовать strtol, потому что это надежная отчетность об ошибках. Он задает возвращаемое значение при переполнении (возвращает LONG_MIN в случае underflow и LONG_MAX в случае переполнения), а также позволяет пользователю установить base, который должен соблюдаться во время преобразования.

0

Вы не можете просто передать строку в int. Вам нужно на самом деле разобрать его. Вы можете использовать функцию atoi, включенную в stdlib.h. Вам нужно поставить:

#include <stdlib.h> 

в верхней части файла и измените строку:

k = (int) argv[1]; 

к:

k = atoi(argv[1]);