2013-02-11 3 views

ответ

5

Ваш вопрос неоднозначен. Вот три возможных интерпретации и ответы.

  1. Каждый символ «строки» в C на самом деле является маленьким целым числом, которое вы можете получить простым индексированием массива.

    int first = p[0]; 
    
  2. Если вы знаете, что первый символ строки является цифрой, и вы хотите его значение как цифра, вы можете воспользоваться тем, что коды символов для '0' через '9' гарантированно быть непрерывной и увеличение:

    int first_dv = -1; 
    if (p[0] >= '0' && p[0] <= '9') 
        first_dv = p[0] - '0'; 
    
  3. Если вы оговорился, и вы на самом деле хотите, чтобы обработать всей строки в виде десятичного числа, вы делаете это с 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 не только не скажет вам, что он разрешен сбой вашей программы при числовом переполнении.

+0

Он также использовал имя ARGV, которое может означать, что он говорит о аргументах, является 2D массива. – 2013-02-11 02:32:19

+0

+1 для полноты. –

Смежные вопросы