11,strtok函数,用于将字符串按照指定的分隔符进行分割。
strtok
函数在首次调用时需要传入待分割的字符串和分隔符,之后的连续调用只需要传入 NULL
作为第一个参数即可继续上一次的分割。函数原型如下:
char *strtok(char *str, const char *delim);
参数说明:
str
:待分割的字符串。在首次调用strtok
时,需要传入待分割的字符串;在连续调用时,传入NULL
。delim
:分隔符字符串,包含一组用作分隔符的字符。
返回值:
- 当成功找到子串时,返回指向该子串的指针。
- 当没有更多子串可供返回时,返回
NULL
。
注意事项:
strtok
函数会修改原始字符串,将其拆分为子串。因此,在使用strtok
之前,请确保原始字符串是可修改的。strtok
函数是非重入(non-reentrant)的,因为它使用静态缓冲区来存储上一次调用的状态。这意味着在多线程环境中使用strtok
可能会导致问题。在这种情况下,可以考虑使用线程安全的替代函数,如strtok_r
。
下面是一个简单的示例,展示如何使用 strtok
函数:
#include <stdio.h>
#include <string.h> int main() { char input[] = "This,is,a,test."; const char *delimiter = ","; char *token; /* 获取第一个子串 */ token = strtok(input, delimiter); while (token != NULL) { printf("%s\n", token); /* 获取下一个子串 */ token = strtok(NULL, delimiter); } return 0;
}
在这个示例中,我们使用逗号作为分隔符来分割字符串 "This,is,a,test."
。程序会输出:
This
is
a
test.
12,atoi 函数,将字符串转整数。
函数原型:
int atoi(const char *str);
参数:
str
:要转换的字符串。
返回值:
- 如果字符串表示的数字在
int
类型的范围内,则返回对应的整数值。 - 如果字符串表示的数字超出了
int
类型的范围,则返回INT_MAX
或INT_MIN
(取决于超出的方向)。 - 如果字符串不包含数字字符,则返回 0。
- 如果字符串为空指针,则行为是未定义的。
示例:
#include <stdio.h>
#include <stdlib.h> int main() { const char *str = "123"; int num = atoi(str); printf("Number: %d\n", num); // 输出: Number: 123 return 0;
}
请注意,atoi
函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用 strtol
或 sscanf
等函数。
13,atof 函数,将字符串转float类型的数据。
函数原型:
double atof(const char *str);
参数:
str
:要转换的字符串。
返回值:
- 如果字符串表示的数字在
double
类型的范围内,则返回对应的浮点数值。 - 如果字符串表示的数字超出了
double
类型的范围,则返回HUGE_VAL
或-HUGE_VAL
(取决于超出的方向)。 - 如果字符串不包含数字字符,则返回 0.0。
- 如果字符串为空指针,则行为是未定义的。
示例:
#include <stdio.h>
#include <stdlib.h> int main() { const char *str = "3.14"; double num = atof(str); printf("Number: %f\n", num); // 输出: Number: 3.140000 return 0;
}
同样地,atof
函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用 strtod
或 sscanf
等函数。
14,atol 函数,将字符串转long类型的数据。
函数原型:
long atol(const char *str);
参数:
str
:要转换的字符串。
返回值:
- 如果字符串表示的数字在
long int
类型的范围内,则返回对应的整数值。 - 如果字符串表示的数字超出了
long int
类型的范围,则返回LONG_MAX
或LONG_MIN
(取决于超出的方向)。 - 如果字符串不包含数字字符,则返回 0。
- 如果字符串为空指针,则行为是未定义的。
示例:
#include <stdio.h>
#include <stdlib.h> int main() { const char *str = "12345"; long int num = atol(str); printf("Number: %ld\n", num); // 输出: Number: 12345 return 0;
}
同样地,atol
函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用 strtol
或 sscanf
等函数。
15,atoll 函数,将字符串转long long类型的数据。
函数原型:
long long int atoll(const char *str);
参数:
str
:要转换的字符串。
返回值:
- 如果字符串表示的数字在
long long int
类型的范围内,则返回对应的整数值。 - 如果字符串表示的数字超出了
long long int
类型的范围,则返回LLONG_MAX
或LLONG_MIN
(取决于超出的方向)。 - 如果字符串不包含数字字符,则返回 0。
- 如果字符串为空指针,则行为是未定义的。
示例:
#include <stdio.h>
#include <stdlib.h> int main() { const char *str = "123456789012"; long long int num = atoll(str); printf("Number: %lld\n", num); // 输出: Number: 123456789012 return 0;
}
同样地,atoll
函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用 strtoll
或 sscanf
等函数。