斯特托尔第二个论点
Strtol second argument
本文关键字:第二个 更新时间:2023-10-16
strtol
的第二个参数是如何工作的?
这是我尝试过的:
strtol(str, &ptr, 10)
其中ptr
是char *
,str
是字符串。现在,如果我以'34EF'
str
传入,并打印*ptr
,它正确地给了我E
,*(ptr+1)
给了我F
,但是如果我打印ptr
,它会给我EF!
打印ptr
不应该只导致垃圾值,如十六进制地址或其他东西吗?
ptr
是指向以 null 结尾的字符串内部的指针。因此,给定"34EF"
它最终指向字符'E'
并且从该地址开始的字符串"EF"
。
像p = "34EF"
这样的四字符 C 字符串实际上包含五个字符串合二为一。字符串p
是"34EF"
。字符串p+1
是"4EF"
;字符串p+2
是"EF"
; p+3
是"F"
,p+4
是空字符串""
。在这种情况下,p+4
指向F
之后的空终止符字节。
说到空字符串,如果strtol
的输入仅包含构成数字标记的有效字符,则ptr
应指向空字符串。
如果要禁止尾随垃圾,可以对此进行测试。也就是说,即使解析出有效数字,如果*ptr
不是 0,则输入具有尾随垃圾。在某些情况下,最好拒绝:"亲爱的用户,10Zdf 不是一个数字;请输入一个数字!
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 需要使用模板查找数组的第二个最小和最小值
- c++:交换向量中所有元组的第一个和第二个元素
- 如果条件,当我想第二个参数时
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?