将字符串转换为int(但仅当真的是int时)

Alf*_*red 3 c validation integer strtol

在大学时,我被问到我们的程序是否检测到从命令行参数输入的字符串是否是一个它没有(./Program 3.7)的整数.现在我想知道我怎么能发现这个.因此,例如输入a无效,其中atoi检测到,但是例如输入3.6应该是无效的但是atoi将其转换为整数.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc > 1) {
        int number = atoi(argv[1]);
        printf("okay\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是只有当argv [1]真的是一个整数时才应该打印出来.希望我的问题很明确.非常感谢.

Gre*_*osz 10

看看strtol.

如果endptr不为NULL,则strtol()将第一个无效字符的地址存储在*endptr中.但是,如果根本没有数字,则strtol()将str的原始值存储在*endptr中.(因此,如果返回时*str不是\0' but **endptr is\ 0',则整个字符串都有效.)

#include <stdio.h>

int main(int argc, char *argv[]) {
  if (argc > 1) {
    char* end;
    long number = strtol(argv[1], &end, 0);
    if (*end == '\0')
      printf("okay\n");
  }
}
Run Code Online (Sandbox Code Playgroud)