我在理解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
,因为我已经检查到末尾了吗?谢谢您的帮助。
最佳答案
以下建议的代码:
干净地编译
执行所需的功能
注意对几个语句的更正
注意头文件的添加
请注意该功能的附加内容:main()
在编程中,细节很重要
现在建议的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char* test = " 4396";
char *ptr;
long result = strtol(test,&ptr,10); // note the change from `int` to `long`
printf("%ld\n",result); // note the change from'%d' to '%ld'
printf("%zu\n",strlen(ptr)); // note the change from '%d' to '%zu'
}
建议代码的输出为:
4396
0
注意第二个输出为0,因为
strlen()
不计算末尾的NUL字节,并且ptr
指向NUL字节关于c - 关于运行strtol后剩余的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54601444/