【发布时间】:2019-12-26 08:33:59
【问题描述】:
我想将字符串(保证只包含数字)转换为 32 位 int。我知道 strtol 和 strtoimax,但它们似乎返回 64 位整数。
这就是我目前的做法:
#include <errno.h>
#include <inttypes.h>
typedef int32_t Int32;
Int32 strToIntValue(char* str) {
char* end;
errno = 0;
int ret = strtoimax(str, &end, 10);
if (errno==ERANGE) {
printf("range error!\n");
return 0;
}
else {
return (Int32)ret;
}
}
【问题讨论】:
-
你可以添加类似:
else if (ret < INT_MIN || ret > INT_MAX) { … error code的内容吗? (或者,更具体地说,INT32_MIN和INT32_MAX,如果你有<stdint.h>。) -
如果您确定字符串只有数字,则不需要进行错误检查,您可以使用
atoi -
@JimDanner 但是如果号码超出范围,
atoi会怎么做? -
Re "
typedef int32_t Int32;",为什么要加这种级别的混淆??? -
@AdrianMole 显然在这种情况下行为是未定义的,stackoverflow.com/a/8871717/7840347
标签: c string string-conversion int32