Как бы я прочитал первый символ этой строки как целое число?Прочитайте первый символ строки как целочисленный в C
char *p = argv[1];
Спасибо!
Как бы я прочитал первый символ этой строки как целое число?Прочитайте первый символ строки как целочисленный в C
char *p = argv[1];
Спасибо!
Ваш вопрос неоднозначен. Вот три возможных интерпретации и ответы.
Каждый символ «строки» в C на самом деле является маленьким целым числом, которое вы можете получить простым индексированием массива.
int first = p[0];
Если вы знаете, что первый символ строки является цифрой, и вы хотите его значение как цифра, вы можете воспользоваться тем, что коды символов для '0'
через '9'
гарантированно быть непрерывной и увеличение:
int first_dv = -1;
if (p[0] >= '0' && p[0] <= '9')
first_dv = p[0] - '0';
Если вы оговорился, и вы на самом деле хотите, чтобы обработать всей строки в виде десятичного числа, вы делаете это с strtol
, или strtoul
, если число не должно быть истолковано как отрицательное:
char *endp;
errno = 0;
long numeric_value = strtol(p, &endp, 10);
if (endp == p || *endp) {
fprintf(stderr, "junk after number: %s\n", endp);
} else if (errno) {
fprintf(stderr, "%s: invalid number (%s)\n", p, strerror(errno));
}
Они объявлены в <stdlib.h>
. Вы делаете не сделайте это с atoi
или sscanf
, против того, что многие другие люди скажут вам: atoi
не скажет вам, есть ли после номера номер, а sscanf
не только не скажет вам, что он разрешен сбой вашей программы при числовом переполнении.
Он также использовал имя ARGV, которое может означать, что он говорит о аргументах, является 2D массива. – 2013-02-11 02:32:19
+1 для полноты. –
Посмотрите на функции atoi – SecurityMatt