在C中使用strtoul

在C中使用strtoul,c,strtol,C,Strtol,在C语言中,为什么 strtoul(argv[1]) 就是不管用?看起来需要更多的参数,但我不能阻止这个数字会持续多久 谢谢 p、 s.(argv[1]设置正确)。因为您使用错误的参数数调用它。试一试 strtoul(argv[1], 0, 0); 或者,如果您只想强制执行base-10: strtoul(argv[1], 0, 10); 确保您也包含了 试试这个(对于十进制值): 其他参数不是“数字的长度”。阅读手册页 unsigned strtoul(char *s, char **en

在C语言中,为什么

strtoul(argv[1])

就是不管用?看起来需要更多的参数,但我不能阻止这个数字会持续多久

谢谢


p、 s.(argv[1]设置正确)。

因为您使用错误的参数数调用它。试一试

strtoul(argv[1], 0, 0);
或者,如果您只想强制执行base-10:

strtoul(argv[1], 0, 10);
确保您也包含了

试试这个(对于十进制值):


其他参数不是“数字的长度”。阅读手册页

unsigned strtoul(char *s, char **endptr, int base);
endptr
应为
NULL
char*
的地址。如果它不是
NULL
函数将指针设置为指向字符串中第一个未使用的字符,因此可以是非数字或nul终止


base
指定数字的基数。它可能在2到52之间(我相信)。你可能想要10个。作为一种特殊情况,base 0检查十六进制的前缀
0x
,八进制的前缀
0
(十进制的前缀为none),并进行相应的转换。

您需要找到
strtoul()
的文档,并在这里提问之前阅读它。Stack Overflow是一个很棒的社区,但在要求我们花时间为你做这件事之前,你甚至都不尝试阅读文档,这几乎是不礼貌的。嘿,亲密的选民:“应该先使用谷歌”不在任何说明中,因为没有关闭的理由。在发布之前阅读它(我不是白痴)但我不知道什么是“基数”。这算是个数学难题。问“你能帮我理解关于strtoul的文档吗?”会有很大的不同吗?@Joseph-是的,会的。这就意味着你试过了,而且遇到了麻烦。这个问题,用词来说,意味着你没有尝试,也没有真正理解C.+1,但是用0表示
NULL
有点让我觉得不对劲……我承认这是我个人的偏好,但我觉得使用
NULL
在调用变量函数或缺少原型的(uhg)函数时给人一种错误的安全感。允许实现将
NULL
定义为任何空指针常量,因此
0
(void*)0
,甚至
(1-1)
都是有效的。使用
NULL
隐藏了将
NULL
定义为
(void*)0
的不可移植假设,如果该假设为false,则会导致代码中断。使用
0
可以捕捉到少数情况(如可变函数),在这些情况下,您确实需要强制转换,并提示您进行修复。我认为只允许
0
(void*)0
,但我正在使用iPhone,因此无法检查标准。那么使用
#define MYNULL((void*)0
不是更好吗?请注意,对于可变函数,有时实际上需要的是
(char*)0
。我的偏好是在必要时使用正确的显式强制转换,否则使用普通0。但我也明白有些人会多么不喜欢这样。(顺便说一句,普通0对C++更友好,有些人可能会关心这一点。不过,我并不是写两个世界中最糟糕的代码。:-)@Chris:6.3.2.3/3:“值为0的整数常量表达式,或者转换为type
void*
的表达式,称为空指针常量”。7.17/3:“宏是
NULL
,它扩展为实现定义的NULL指针常量…”<代码>(1-1)是值为0的ICE。就这一点而言,
0L
也是如此。+1比我解释得更多
unsigned strtoul(char *s, char **endptr, int base);