斯特托尔第二个论点

Strtol second argument

本文关键字:第二个      更新时间:2023-10-16

strtol的第二个参数是如何工作的?

这是我尝试过的:

strtol(str, &ptr, 10)

其中ptrchar *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 不是一个数字;请输入一个数字!

相关文章: