Tag: strtol

strtol重用param

此代码似乎按预期工作,使用单个指针填充数字数组 #include #include #include int main(void) { int arr[4], count = 0, i; char *p, s[32] = ” \t 10, 15 \n ,20, 25 , “; p = s; do { arr[count++] = (int)strtol(p, &p, 10); while (isspace(*p) || *p == ‘,’) p++; } while (*p); for (i = 0; i < count; i++) { […]

使用strtolvalidationANSI C中的整数输入

我是编程和C的新手,我目前正在大学学习。 这是一个任务,所以我想避免直接的答案,但更多的提示或提示/推动正确的方向。 我试图使用strtol来validation我的键盘输入,更具体地说,测试输入是否为数字。 我已经查看过这里和其他网站上的其他问题,我已经按照给其他用户的说明,但它没有帮助我。 从我读取/理解的strtol (long int strtol(const char * str,char ** endptr,int base);)如果endptr不是空指针,该函数将endptr的值设置为第一个字符之后的号码。 因此,如果我要输入84948ldfk,则endptr将指向’l’,告诉我输入中除了数字之外还有其他字符会使其无效。 然而在我的情况下,正在发生的事情是,无论我输入什么,我的程序返回一个无效的输入。 这是我的代码: void run_perf_square(int *option_stats) { char input[MAX_NUM_INPUT + EXTRA_SPACES]; /*MAX_NUM_INPUT + EXTRA_SPACES are defined *in header file. MAX_NUM_INPUT = 7 *and EXTRA_SPACES *(for ‘\n’ and ‘\0’) = 2. */ char *ptr; unsigned num=0; /*num is unsigned as it was […]

用于从字符串中提取数字/数字范围的复杂算法

我正在研究一种算法,我正在尝试以下输出: 给定值/输入: char *Var = “1-5,10,12,15-16,25-35,67,69,99-105”; int size = 29; 这里“1-5”表示范围值,即它将被理解为“1,2,3,4,5”,而仅具有“,”的值是单独的值。 我正在编写一种算法,其中结束输出应该是这样的,它将提供完整的输出范围: int list[]=1,2,3,4,5,10,12,15,16,25,26,27,28,29,30,31,32,33,34,35,67,69,99,100,101,102,103,104,105; 如果有人熟悉这个问题,那么帮助将非常感激。 提前致谢! 我的初始代码方法如下: if(NULL != strchr((char *)grp_range, ‘-‘)) { int_u8 delims[] = “-“; result = (int_u8 *)strtok((char *)grp_range, (char *)delims); if(NULL != result) { start_index = strtol((char*)result, (char **)&end_ptr, 10); result = (int_u8 *)strtok(NULL, (char *)delims); } while(NULL != result) { […]

你为什么不能检查errno是否等于ERANGE?

我一直在尝试使用strtol将char数组正确转换为long,检查是否存在溢出或下溢,然后对long执行int转换。 一路上,我注意到很多代码看起来像这样 if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE) { // Handle the error } 为什么你不能只说 if(errno == ERANGE) { // Handle the error } 根据我的理解,如果发生下溢或溢出,则在两种情况下都将errno设置为ERANGE。 前者真的有必要吗? 可以单独检查ERANGE是否有问题? 这就是我的代码现在的样子 char *endPtr; errno = 0; long result = strtol(str, &endPtr, 10); if(errno == ERANGE) { // Handle Error } else if(result […]

在C中有效地将hex字符串转换为整数?

在C中,将hex数字字符串转换为二进制unsigned int或unsigned long的最有效方法是什么? 例如,如果我有0xFFFFFFFE ,我想要一个带有base10值4294967294的int 。