Strtol 第二个参数

Sid*_*tha 2 c++ string parsing strtol

第二个论点如何运作strtol

这是我尝试过的:

strtol(str, &ptr, 10)
Run Code Online (Sandbox Code Playgroud)

其中ptr是 achar *并且str是一个字符串。现在,如果我传入stras'34EF'和 print *ptr,它会正确地给我E, 并*(ptr+1)给我F,但是如果我 print ptr,它会给我EF!打印不应该ptr导致像十六进制地址之类的垃圾值吗?

Kaz*_*Kaz 5

ptr是指向空终止字符串内部的指针。因此,假设"34EF"它最终指向该字符'E',并且从该地址开始的字符串是"EF"

一个四字符的 C 字符串p = "34EF"实际上包含五个字符串。字符串p"34EF". 该字符串p+1"4EF"; 该字符串p+2"EF"; p+3"F"p+4是空字符串""。在这种情况p+4下,指向 后的空终止符字节F

说到空字符串,如果输入strtol仅包含构成数字标记的有效字符,则应ptr指向空字符串。

如果您想禁止尾随垃圾,您可以对此进行测试。也就是说,即使解析出有效数字,如果*ptr不为 0,则输入的尾随垃圾。在某些情况下,最好拒绝:“尊敬的用户,10Zdf 不是数字;请输入数字!”