- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据this document ,
The second argument (char **endptr) seems to be a waste of space! If it is set to NULL, STRTOL seems to work its way down the string until it finds an invalid character and then stops. All valid chars read are then converted if the string starts with an invalid character the function returns ZERO (0).
这意味着以下代码应将 2
检测为十六进制数:
int main()
{
char * string = "p1pp2ppp";
unsigned integer = strtoul(string, NULL, 16);
printf("%u", integer);
return 0;
}
但是,它返回零。
为什么?
最佳答案
手册页对第二个参数进行了以下说明:
If endptr is not NULL, strtol() stores the address of the first invalid character in *endptr. If there were no digits at all, strtol() stores the original value of nptr in *endptr (and returns 0). In particular, if *nptr is not '\0' but **endptr is '\0' on return, the entire string is valid.
例如:
char str[] = "123xyz45";
char *p;
long x = strtol(str, &p, 10);
printf("x=%ld\n", x);
printf("p - str = %d\n", p - str);
printf("*p = %c\n", *p);
printf("p (as string) = %s\n", p);
输出:
x=123
p - str = 3
*p = x
p (as string) = xyz45
我们可以看到,当strtol
返回时,p
指向str
中第一个无法转换的字符。这可用于一次解析字符串,或者查看是否可以转换整个字符串或是否有一些额外的字符。
在您的示例中,string
中的第一个字符(即“p”)不是基于 10 的数字,因此不会转换任何内容,并且函数返回 0。
关于c - strtoul() 函数中的第二个参数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55573174/
根据this document , The second argument (char **endptr) seems to be a waste of space! If it is set to
我正在尝试使用 strtoul 函数,但如下所示,它返回一个意外的值(在开头添加 ff): #include #include #include main() { unsigned lo
所以我在小端和大端机器上都使用 strtoul 将字符串转换为无符号长整型。小端机器返回正确的值,而大端机器没有。这个函数真的不兼容大端机器吗?如果是这样,是否有变通办法? 代码: printf ("
例如: int main() { errno = 0; printf("val = %lu err: %d\n", strtoul("12345678901234", NULL, 10
您好,我写了一个小测试程序来检查我编写的函数如何将字符串(十六进制数)转换为无符号整数,我发现代码的行为因我使用的编译器或系统而异。 我编译了下面的代码: (1) ideone C++4.3.2 ht
我正在尝试创建一个快速的 iOS 程序,将数字转换为十进制、二进制和十六进制数字。我遇到过 strtoul 函数,但不太明白如何使用它,有人能解释一下吗?谢谢! 最佳答案 strtoul 方法使用起来
根据 strtoul 的文档,关于它的返回值... This function returns the converted integral number as a long int value. I
我有这个愚蠢的示例程序,它将输入值作为十六进制并将其转换为无符号长整数。转换后我将结果打印出来。 #include int main (int argc, char *argv[]) { u
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要将大字符数转换为长字符数,以便在 AtmelStudio 上对我的 Atmega8 芯片进行编程。 我尝试使用 atol() 和 strtoul() 但它不起作用。我在谷歌上看到 strtoul
我正在尝试将此代码转换为 unicode int fromHex(const supportlib::string_t &s) { return std::strtoul(s.c_str(),
我在 c 中遇到了 strtol 的一些异常结果 这是示例程序。 #include #include #include int main() { printf("%x\n", st
考虑以下示例: #include #include #include #include int main() { std::setlocale(LC_ALL, "en_US.utf8"
我在 gcc 下编译了以下代码: int parseMsg(const char *msg_to_parse, unsigned long *exp_input, unsigned long *sys
我正在将一个字符串从十六进制转换为十进制。问题是在 Visual Studio 编译器中,转换返回了错误的值。但是,当我使用 g++ 编译器在终端的 Mac 中编译相同的代码时,该值会正确返回。 为什
我正在尝试从 strtoul 函数将十六进制转换为无符号整数。但我得到的输出为 ffffffff。我使用了 stdlib.h 库。谁能告诉我哪里错了? void main() { char st
我正在使用以下代码将 Const char * 转换为 Unsigned long int,但输出始终为 0。我哪里做错了?请告诉我。 这是我的代码: #include #include #inc
我正在寻找将字符串转换为 stdint.h 的标准函数整数,比如 int i = atoi("123"); unsigned long ul = strtoul("123", NULL, 10); u
我试图从正在解析的命令行中找出哪个函数最适合将十进制、十六进制或八进制数转换为 int 最好——在不知道输入的情况下事先。 目标是使用一个函数来识别不同类型的输入并将其分配给它的整数 (int) 值,
我不明白,为什么这不起作用?PS:我从一些谷歌找到了这段代码! 问题:我不知道为什么它会起作用?这也考虑时区吗?! 1 #include 2 #include 3 #include
我是一名优秀的程序员,十分优秀!