atol和strtol的區別

bigface1234fdfg發表於2015-01-31

atol和strtol的區別

    

    字串中有兩個重要的函式:atol和strtol,它們的功能都是字元陣列,轉數值。但是用法差異較大。我們下面來說一下這兩個函式在具體使用的時候要注意哪些方面。


    首先,說atol。

    這個函式定義為:

long atol(const char* s);

    就是輸入一個字元陣列(注意,不是string型別的字串)的頭元素的地址,然後我們就可以轉換成數值。舉個例子:


#include<iostream>
#include<string>

using namespace std; 

int main()
{
	char a[] = "123"; 
	cout<<atoi(a)<<endl; 

	char b[] = "abc"; 
	cout<<atoi(b)<<endl; 

	char c[] = "23&"; 
	cout<<atoi(c)<<endl; 
	
	string str = "234"; 
	cout<<atoi(str.c_str())<<endl; 

	return 0; 
}

結果:



如果我們輸入的是第一個字元就是非法的字元,那麼返回的是0;

如果我們輸入的是前面是有效的數值字元,那麼返回前面的數值,後面非法的不返還。


那麼如果我們需要用string型別過來操作呢?可以這樣子:

我們使用str.c_str()函式。


    再說strtol函式。

函式定義為:

long strtol(const char*s, char** endptr, int base);


    作用就是將字串轉換成長整數,base為進位制數。如果轉換成功,*endptr指向s; 否則*endptr指向第一個非法字元。

    關於其中的base,規定如下:



    有下面幾個例子:





所以說,strtol函式中的輸入base的作用還是挺大的。






相關文章