scanf 系列中有个函数 sscanf,可能有人用过,它的普通用法,我就不讲了,可以参考这里:man 3 sscanf
gnu c 实现了 C 标准的 format specify 的 %n,它的含义是返回从该次 XXscanf 调用开始到此读了多少个字节,我们可以利用这一点,来实现不需要内存分配的%s:
假定我们读取一批商品记录,每条记录包含商品ID,商品名称,商品价格,各字段的类型在代码中是自包含的
%*s 用来扫描但跳过(不存储)一个字符串,两个 %n,前一个得到name的起始偏移,后一个得到name的结束偏移……其它的,也就不用我多说了。
%n 应该是 C99 新加入的,不过这一点我不太确信,但 gnu 里面的确有这个实现,msvc 里面没有,其他的环境就不太清楚了。如果是写服务器应用,一般就不用担心它是否实现(95%以上的服务器都该有gnu环境吧,况且 glibc 和gcc是相对独立的)。
%n 特性真可谓小技巧,大智慧,我很长一段时间不知道这个东西,还一直为 XXprintf 系列可以得到已写出的字节数,而 XXscanf 无法得到已读取的字节数犯愁。
我觉得在新代码中应该使用该技巧取代 %s,当然,gnu 的 XXscanf 里面还有个 %as,它返回一个由系统 malloc 出来的字符串,需要用户自己调用 free 来释放它。如果是写纯 C 代码,并且字符串需要保存起来长期使用,应该使用 %as,否则应该使用我提到的这个技巧。
分享到:
相关推荐
sscanf ,sscanf ,sscanf
sscanf函数的范例的用法和实例,使人尽快掌握sscanf的用法。
tcc_sscanf tcc_sprintf tcc_strcpy tcc_strcmp tcc_strstr tcc_strcat tcc_memcpy tcc_memcmp tcc_memset tcc_strlen tcc_malloc tcc_free *********************************************************************...
sscanf函数的高级用法,在C程序中我们往往用它实现对各种复杂格式字符串的处理(解析),配合sprintf
C语言或者C++ 中的sscanf的一些操作练习进行详解,一般用来分割字符串; 如固定格式的ch = "\"aa bb cc\" \"dd ff gg\"";
sscanf 正则表达式 format, 非常不错的资源,可以再也不用太担心sscanf的用法了
sscanf函数的高级用法,非常好的资料,由KLC搜集整理,不敢独享,大家都来下载吧
sscanf() 用法 dome Vs2010
在程序设计中有很多时候需要格式控制的,这时使用sscanf和sprintf就可以了
sscanf使用的时候有一个陷阱,存入的数是32的,如果不到32位,会发生内存越界!
详细的c语言正则表达式用法,sscanf的正则表达不会用的必看
sscanf用法例子 比较小 有兴趣就下
sscanf,sprintf,fscanf,fprintf 系列函数的用法小结
基于sscanf实现的json c解码库,体积非常小。实现了字符串,整数,浮点数的解析。纯c实现,易于移植。 只有几十行代码量,编译后体积不到1K。
sscanf的使用方法,可以直接拿来使用,很方便参考学习
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。但是有点类似于正则表达式
c程序,可以帮你编写程序,他介绍了sscanf的偶那个发。
很多初学者可能没用过或者很少用这个函数把,其实功能很强大的哦,现在处理各种字符串都用它,呵呵