我在理解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/

10-13 08:30