第二个论点如何strtol
工作?
这是我尝试过的:
strtol(str, &ptr, 10)
其中ptr
是 achar *
并且str
是字符串。现在,如果我传入str
as'34EF'
和 print *ptr
,它会正确地给我E
,并且*(ptr+1)
给我F
,但是如果我 print ptr
,它给我EF!
不应该打印ptr
只是导致像十六进制地址或其他东西的垃圾值吗?
ptr
是一个指向空终止字符串内部的指针。因此,假设"34EF"
它最终指向字符'E'
并且从该地址开始的字符串是"EF"
.
一个像四个字符的 C 字符串p = "34EF"
实际上包含五个字符串合二为一。字符串p
是"34EF"
. 字符串p+1
是"4EF"
; 字符串p+2
是"EF"
;p+3
is"F"
和p+4
是空字符串""
。在这种情况下p+4
,指向 . 之后的空终止符字节F
。
说到空字符串,如果输入strtol
只包含构成数字标记的有效字符,那么ptr
应该指向一个空字符串。
如果您想禁止尾随垃圾,您可以对此进行测试。也就是说,即使解析出一个有效数字,如果*ptr
不是 0,那么输入有尾随垃圾。在某些情况下,最好拒绝:“尊敬的用户,10Zdf 不是数字;请输入一个数字!”