1、strtok 字符串分割
原型:
char *strtok(char s[], const char *delim);
解释:
分割字符串,s为传入的字符串,delim为分割符,返回值为分割出的子串的地址。
可以通过多次调用strtok,将字符串分解为一个个子串,只需第一次调用传入母串,后续调用只需要传入NULL即可。
strtok会破坏传入字符串的完整性,所以如果后续需要使用母串的话,需要先为母串拷贝一个副本。
示例:
char* p = (char*)malloc(1024);
memcpy(p, "aaa,bbb,ccc,ddd", 1024);
char* p1 = strtok(p, ",");
char* p2 = strtok(NULL, ",");
char* p3 = strtok(NULL, ",");
char* p4 = strtok(NULL, ",");
cout << "p1:" << p1 << endl;
cout << "p2:" << p2 << endl;
cout << "p3:" << p3 << endl;
cout << "p4:" << p4 << endl;
输出:
2、strtol 字符串转数字
原型:
long int strtol(const char *nptr,char **endptr,int base);
解释:
将字符串转换为数字,nptr为母串,base为转换进制,返回转换后的数字和母串中首个未被识别的字符的地址(endptr)。
通过endptr可以判断转换结果,如果endptr = 0,说明字符串不可识别,转换失败。
如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE。
strtol的功能比itoa更为强大。
示例:
char* srcPtr = "0x10A,,1";
char* endPtr = NULL;
int num = strtol(srcPtr, &endPtr, 16);
cout << "number:" << num << endl;
cout << "can not idetify:" << endPtr << endl;
输出: