2

我将如何将该字符串的第一个字符读取为整数?

char *p = argv[1];

谢谢!

4

1 回答 1

5

你的问题模棱两可。以下是三种可能的解释及其答案。

  1. C 中“字符串”的每个字符实际上都是一个小整数,您可以通过简单地索引数组来检索它。

    int first = p[0];
    
  2. 如果您知道字符串的第一个字符是 digit 并且您希望它的值是 digit,您可以利用这样一个事实,即'0'through的字符代码'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>. 您不要使用or 执行此操作,与atoi许多sscanf其他人会告诉您的相反:atoi不会告诉您数字后面是否有垃圾,sscanf不仅不会告诉您,还允许您的程序在数字溢出时崩溃.

于 2013-02-11T02:31:00.240 回答