C语言中strtod与strtol的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yz930618/article/details/84652168

strtod与strtol都是C/C++中常用的将字符数组转换成数组型常用的函数,但是它们也有一定的区别(C++真是让人又爱又恨)。

strtod用法

定义:double strtod (const char* nptr, char** endptr);

参数:nptr为待转换的字符数组,endptr为不符合条件而终止nptr中的字符指针;

strtol用法

定义:long strtol (const char* nptr, char** endptr, int base);

参数:nptr为待转换的字符数组,endptr为不符合条件而终止nptr中的字符指针,base为转换的进制数。

strtod与strtol共同点

  • 扫描nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始转换;
  • 若endptr不为NULL,则会将不符合条件而终止的nptr中的字符指针由endptr传回;
  • 当出现不符合要求的字符或字符串结束时('\0')才结束转换,并将结果返回;
  • 处理的格式是char *,如果对象是string对象,则需要利用c_str()转换为字符数组格式。

strtod与strtol不同点

  • 返回值不同:strtod返回double,并且四舍五入保留一位小数;strtol返回long;
  • 要求不同:strtod的字符数组中可包含正负号,小数点或者E(e)表示指数部分;strtol只能包含数字和正负号;
  • 数字进制不同:strtod只能转换为十进制;strtol可根据base选择不同的进制数。

实例讲解

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    char * endptr;
    char a[] = "  -12321.45";
    char b[] = "234.23424sdfd";
    char c[] = "-2343.23e4";
    char d[] = "#v1";
    string e = "12312.234";
    cout << "---------------------strtod实例---------------------"<< endl;
    cout << "a =" << strtod(a,NULL) << endl;
    cout << "b =" << strtod(b,&endptr) << endl;
    cout << "endptr =" << endptr << endl;
    cout << "c =" << strtod(c,NULL) << endl;
    cout << "d =" << strtod(d,&endptr) << endl;
    cout << "endptr =" << endptr << endl;
    cout << "e =" << strtod(e.c_str(),&endptr) << endl;

    cout << "---------------------strtol实例---------------------"<< endl;
    cout << "a =" << strtol(a,NULL,10) << endl;
    cout << "b =" << strtol(b,&endptr,10) << endl;
    cout << "endptr =" << endptr << endl;
    cout << "c =" << strtol(c,NULL,10) << endl;
    cout << "d =" << strtol(d,&endptr,10) << endl;
    cout << "endptr =" << endptr << endl;
    cout << "e =" << strtod(e.c_str(),&endptr) << endl;
    return 0;
}

运行结果如下:

猜你喜欢

转载自blog.csdn.net/yz930618/article/details/84652168