2

第二个论点如何strtol工作?

这是我尝试过的:

strtol(str, &ptr, 10)

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

4

1 回答 1

5

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

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

说到空字符串,如果输入strtol只包含构成数字标记的有效字符,那么ptr应该指向一个空字符串。

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

于 2012-04-23T23:25:48.753 回答