Strtol 第二个参数
Posted
技术标签:
【中文标题】Strtol 第二个参数【英文标题】:Strtol second argument 【发布时间】:2012-04-23 23:24:28 【问题描述】:strtol
的第二个参数是如何工作的?
这是我尝试过的:
strtol(str, &ptr, 10)
其中ptr
是char *
而str
是一个字符串。现在,如果我将str
作为'34EF'
传递,并打印*ptr
,它正确地给了我E
,而*(ptr+1)
给了我F
,但是如果我打印ptr
,它给了我@ 987654333@ 不应该打印ptr
只会导致像十六进制地址之类的垃圾值吗?
【问题讨论】:
【参考方案1】:ptr
是指向空终止字符串内部的指针。所以给定"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 不是数字;请输入数字!”
【讨论】:
不,这不是类比。实际上,那里实际上有五个字符串,由于共享一个共同的后缀,它们被压缩成一个小的存储空间。如果它是一个类比,我会加上它是一个类比的措辞。以上是关于Strtol 第二个参数的主要内容,如果未能解决你的问题,请参考以下文章