【发布时间】:2026-01-28 11:45:02
【问题描述】:
我无法理解 C 中 strtol() 的行为。例如,当我测试字符串 " 4396" 时,如果有:
char *test = " 4396";
char *ptr;
int result = strtol(test, &ptr, 10);
printf("%d\n", result);
printf("%d\n", strlen(ptr));
输出:
4396
//not 0
我只是想知道为什么长度不是0,因为我已经检查到最后了?
感谢您的帮助。
【问题讨论】:
-
ptr是一个未初始化的指针,它和strtol有什么关系?调用strlen(ptr)只是未定义的行为 -
另外,
strtol返回一个long int -
编辑后我无法重现结果:ideone.com/MtRXaR(尽管可能是由于使用了错误的类型说明符?)
-
strlenreturnssize_t所以用%d打印也是UB。 Use%zuinstead -
(如您已编辑问题)使用
" 4396"后,ptr设置为最后一位转换后的下一个字符,例如在'6'之后,它指向 nul-character 结尾test。所以ptr指向empty-string 并且strlen等于0。您可以通过if (!*ptr) puts ("pointing at nul-character");确认