sscanf、strsep

#include <stdio.h>
#include <string.h>

int main()
{
    char token[] ="abdzxbcdefgh";
    char str[]="3:2:09";
    int a1=0, a2=0, a3=0;
    int ret;

    printf("%s\n",token);
    char *tokenremain = token;
    char *tok1 = strsep(&tokenremain,"cde");
    printf("tok1:%s,token:%s\n",tok1,tokenremain);
    tok1 = strsep(&tokenremain,"cde");
    printf("tok1:%s,token:%s\n",tok1,tokenremain);
    printf("%s\n", token );
    ret=sscanf( str, "%d:%d:%d", &a1, &a2, &a3 );
    printf( "ret=%d,%d:%d:%d\n", ret, a1, a2, a3 );

    return 0;
}

输出:

abdzxbcdefgh
tok1:ab,token:zxbcdefgh
tok1:zxb,token:defgh
ab
ret=3,3:2:9

注意问题:

1、sscanf返回值,是识别token的个数;

2、strsep会修改被扫描的字符串,会在扫描到的地方设置为‘\0‘

时间: 2024-12-19 08:09:05

sscanf、strsep的相关文章

两个神奇的函数~~~sscanf、atoi

sscanf 对你没有看错 多了一个s 这个函数有什么作用呢 功能:读取字符串中的int.double.long.long long .float and so on 类型的数据 譬如说 我现在读入了一串字符串 abc123hhh,我想读入前面的abc 那么我应该怎么使用sscanf呢 我们可以取到我们需要取的字符串 一直到碰到我们不取的时候就停止 我经常用来将字符串转换成int类型 eg: 顺便分享一个可以转换字符串为int类型的函数atoi 用法如下 还可以将int类型转换成string型哦

STL学习:STL库vector、string、set、map用法

常用方法 vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1) vector<int>v1; (2) vector<int>v2(10);//10个元素,初始为0 (3) vector<int>v3(10,4);//10个元素,初始为4 (4) vector<int>v4(v3);//拷贝 (5) vector<int>v5=v4;//

PHP字符串操作大集合

字符串的处理非常重要.文本字符串中的空格或者其他没有意义的符号.例如,在一个电子商务应用中,当用户填写订单的内容时(如联系地址),可能输入一些空格.句号等PHP4及以上版本提供了4个去除字符串str首尾处空格或其他特殊符号.     string ltrim(string str [, string charlist]):去除字符串str尾的空格或其他特殊符号.     string chop(string str [, string charlist]):功能同rtrim(). 以上函数的第1

Go基础篇【第2篇】: 内置库模块 fmt

package fmt import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O.格式化动作('verb')源自C语言但更简单. Printing verb: 通用: %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q

C语言可变参数在宏定义中的应用

在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择. 在C99中规定宏也可以像函数一样带可变的参数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,__VA_ARGS__在预处理中,会被实际的参数集(实参列表)

C在宏定义中使用的语言可变参数

于C标准库的语言,printf.scanf.sscanf.sprintf.sscanf入输出函数,參数都是可变的.在调试程序时.我们可能希望定义一个參数可变的输出函数来记录日志,那么用可变參数的宏是一个不错的选择. 在C99中规定宏也能够像函数一样带可变的參数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 当中,...表示可变參数列表,__VA_ARGS__在预处理中,会被实际的參数集(实參列表)所替换. 同一时

警惕缓冲区溢出(C中那些不安全的库函数)

C 和 C++ 不能够自动地做边界检查,边界检查的代价是效率.一般来讲,C 在大多数情况下注重效率.然而,获得效率的代价是,C 程序员必须十分警觉以避免缓冲区溢出问题. C语言标准库中的许多字符串处理和IO流读取函数是导致缓冲区溢出的罪魁祸首.我们有必要了解这些函数,在编程中多加小心. 一.字符串处理函数 strcpy() strcpy()函数将源字符串复制到缓冲区.没有指定要复制字符的具体数目!如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会造成缓冲区溢出! 我们也可以使用str

C/C++编程规范

1.注意:strncpy.strncat等带n版本的字符串操作函数在源字符串长度超出n标识的长度时,会将包括'\0'结束符在内的超长字符串截断,导致'\0'结束符丢失.这时需要手动为目标字符串设置'\0'结束符. char dst[11]; // [注意]最好每次定义时初始化为0: dst[11] = {0}; char src[] = "0123456789"; char *tmp = NULL; memset(dst, '@', sizeof(dst)); memcpy(dst,

89 fcanf和fprintf

scanf.printf.putchar.getc.putc.fgets.fputs.sscanf.sprintffscanf和fprintf fgets  从屏幕上获取输入(stdin)或者从文件中获取输入fputs  输入到屏幕上(stdout)或者输出到文件中. scanf   从屏幕上的输入格式化分离.printf   输出到屏幕上. sscanf  从字符串中格式化分离.sprintf  输出到字符串中. fscanf  从文件中格式化分离.fprintf  输出到文件中. fscan