c - 在 C 中将字符串的第一个字符读取为整数

标签 c string atoi

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

char *p = argv[1];

谢谢!

最佳答案

你的问题不明确。以下是三种可能的解释及其答案。

  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不仅不会告诉你这一点,它还允许在数字溢出时使你的程序崩溃。

关于c - 在 C 中将字符串的第一个字符读取为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14805066/

相关文章:

用于释放 2D、3D...数组内存的 C 函数

string-ref 函数不能正常工作

c - 使用 strcpy 将字符串复制到使用 atoi 检索到的索引处的元素中

c - 打印出额外的数字? (C)

c++ - 如何在 C++ 中检查互联网可用性

C 字符串已更改

java - 如何在Java中使用转义字符分割或解析字符串

python - float 双重列表?

c++ - 在 C++ 中使用 atof 将字符串转换为十进制不起作用

c - C 中 {if else} 的具体行为