从指针转换为不同大小的整数 [-Wpointer-to-int-cast]

标签 c

bool is_legal_size_spec(char *timeSpec){

  char timeSpecArray[100];
  strcpy(timeSpecArray, timeSpec);
  char restrictions[] = {100,12,31,24,60,60};
  char delimiter[] = " yndhms";

  char *token = strtok(timeSpecArray, delimiter);
  printf("%s", token);

  if((int)token > restrictions[0]){
    printf("%s", "No");
    return 0;
  }

我必须将 token 与限制中的第一个元素进行比较,但我收到一条错误消息,指出从指针转换为不同大小的整数,有人有任何建议吗?我环顾四周,没有发现任何东西。任何事情都值得赞赏,谢谢。

最佳答案

(int)token > restrictions[0]

token 转换为 int 是您收到该错误消息的原因。 token 是一个指向以零结尾的字符串的指针,该字符串不能轻易与数字进行比较 (restrictions[0])。您必须将字符串转换为数字,例如使用 strtol() :

#include <errno.h>
#include <stdlib.h>

// ...

char *end;
errno = 0;
long value = strtol(token, &end, 10);
if(token == end || errno == ERANGE) {
    // conversion failed :(
}
else if (value > restrictions[0]) {
    // ...
}

关于从指针转换为不同大小的整数 [-Wpointer-to-int-cast],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422379/

相关文章:

c - tolower 用于 C 风格的字符串

c - 将字符串拆分为一定大小的 char 数组

c - 警告 C4013 : undefined; assuming extern returning int

c - libc.so.6 在 Linux 内核中的相关性

C - 创建/写入/读取命名管道

c - C 中 printf 可打印的最大字符数

c++ - Makefile 问题 - 部分执行两次

c - 查找基数 K 中的第 n 个回文素数

c - 任何 memcpy() 实现是否使用多个处理器寄存器?

c - 在函数之间使用指针时出现段错误