问题标签 [strtol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - printf 的不同输出
从控制台读取后,我试图打印一个特别大的值。当我尝试从两种不同的方式打印它时,一种是在分配后直接打印,一种是使用strtol
函数的返回值,我得到不同的输出!有人可以解释一下为什么我注意到两个不同的输出吗?
输入值为:4294967290
这是代码片段。
输出
c - C 警告:传递 'strcpy' 的参数 2 使指针从整数而不进行强制转换
解释:
只是试图将 aa char 转换为十六进制,但我不断收到此错误,我不知道如何解决这个问题
问题:
代码:
c - 如何从C中的字符串中提取各种整数?
我想知道如何从字符串中提取各种数字。我知道 strtol 有效,但它似乎只适用于第一个数字。
这是我的代码
在这个例子中,我想输出 v1 = 16 和 v2 = 23。
另一个例子,如果 str 是“12,23,34”,我想要 v3=34
提前致谢 :)
c - 打印出字符串的整数表示时 Scanf 和 strtol 的属性
我知道字符串只是一个具有相邻内存地址的字符数组。所以当你有一个字符数组时:
并将 s[1] 处的字符数组更改为“5”,然后打印这样的数组应返回“15345”。现在我的问题是关于 scanf 和 strtol 函数。当我使用 scanf 两次使用不同大小的字符串将值插入数组 s 时,为什么 strtol 函数不转换整个数组?
这是我的代码作为示例:
想象一下这些用户输入:
然后程序将打印出“大小为 10000”
然后用户输入:
然后程序打印“大小为 100”
为什么它不再打印出“大小为1000”?我只将 100 存储为字节,第一个输入中字节的剩余数组元素不应该保持不变, strtol 应该转换数组的其余部分吗?
在我看来,当程序将第一个输入 10000 存储到数组字节中时,那一刻看起来像这样
字节 = {1,0,0,0,0}
然后当用户输入 100 时,数组看起来是一样的,因为它只改变了前 3 个元素的值,而数组的其余部分应该保持不变:
字节 = {1,0,0,0,0}
使用该 strtol 会将整个数组转换为 10000 对吗?
将值存储到同一内存地址时,scanf 是否本质上“清空”了数组的其余部分?
c++ - Why does strol need a radix when strtod does not?
I've been working with cin input recently, and I discovered that strtol needs a radix: long int strtol (const char* str, char** endptr, int base);
, but strtod does not: double strtod (const char* str, char** endptr);
. Obviously, double numbers can be represented in other bases, so why this dichotomy?
c - C使用Strtol将字符串解析为两个整数
假设我有一个程序可以计算将字符串中的两个整数相乘的结果。我使用 strtol 分隔第一部分,但如何分隔第二个 int?例如,“12 5”将给出 60 的结果。
现在我的代码看起来像:
所以很明显现在这会产生错误,因为我只将字符串的第一部分转换为整数。如何将剩余的字符串转换为整数?我需要另一条 strtol 线吗?我需要投吗?我不确定该怎么做。
c - strtol 不改变 errno
我正在开发一个程序,该程序在给定一个 char 数组的情况下执行计算,该数组表示格式中的时间HH:MM:SS
。它必须解析各个时间单位。这是我的代码的精简版,只关注时间:
问题是,如果输入无效(例如aa:13:13
),strtol()
显然不会检测到错误,因为它没有更新errno
到1
,所以我无法进行错误处理。我怎么了?
c - Atoi 返回值
我有一个关于atoi的问题。我正在尝试使用 atoi 检查是否可以将字符转换为数字,但是,如果我的数字为 0,我该如何解决?我知道 atoi 如果失败则返回 0,但如果它有效,也会返回数字的值,在这种情况下,0 将属于这两个类别。
如果我改用 strtol,有没有办法检查数组中的字符是否 >= 到 0,或者根本不存在/不存在。
例如,如果我的动态数组由 {1 40 500} 组成,并且我尝试在位置 8 处 strtol(刚刚超出范围),我希望它返回 NULL 或一些 atoi/strtol 失败的指示
c++ - 我可以在 strtol 中使用自定义“拆分字符”吗
我一直在这里阅读有关 strtol 的一些文档
,在示例中,一个人在新号码开始时使用空格来显示此功能。我是 C++ 新手,我不太了解指针以及它们是如何工作的,所以我决定问你这个问题。我可以使用点而不是空格来拆分数字吗?例如,如果我有这个:char text[] = "3.16.88"
并且我想将它转换为三个不同的变量这样a = 3, b = 16, c = 88
,我仍然可以使用 strtol 还是应该尝试其他方法?谢谢
c - 为什么不能只检查 errno 是否等于 ERANGE?
我一直在尝试将 char 数组正确转换为 long with strtol
,检查是否存在溢出或下溢,然后对 long 进行 int 转换。一路走来,我注意到很多看起来像这样的代码
为什么你不能只说
据我了解,如果发生下溢或溢出,两种情况下 errno 都设置为 ERANGE。那么前者真的有必要吗?单独检查 ERANGE 会不会有问题?
这是我的代码现在的样子
如果有前者的原因,请告诉我。