sscanf,sscanf_s及其相关用法
- 格式:wps
- 大小:51.50 KB
- 文档页数:9
sscanf,sscanf_s 及其相关用法 #include
printf("str=%s",str); 3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。 sscanf("123456abcdedf","%[^]",str); printf("str=%s",str); 4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。 sscanf("123456abcdedfBCDEF","%[1-9a-z]",str); printf("str=%s",str); 5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。 sscanf("123456abcdedfBCDEF","%[^A-Z]",str); printf("str=%s",str); //////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 可以用如下代码将字符串形式的 ip 地址转换为四个整数:
char * inputIp int ip[4]; sscanf_s(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1],&ip[2],&ip[3]);
注意 sscanf_s,当读入的类型是整数或其它长度可以确定的类型时,不能在类型后面跟上长度,但 是对于字符串类型(char *)长度无法得知则必须在类型后面明确指出字符串的最大长度(即可以容纳 的空间)。举例如下:
int main(void ) { char tokenstring[] ="15 12 14..."; char s[81]; char c; int i; float fp; #include
// Input various data from tokenstring: // max 80 character string plus NULL terminator sscanf_s( tokenstring, "%s", s, _countof(s) ); sscanf_s( tokenstring, "%c", &c,sizeof(char) ); sscanf_s( tokenstring, "%d", &i ); sscanf_s( tokenstring, "%f", &fp ); // Output the data read printf_s( "String = %s\n", s ); printf_s( "Character = %c\n", c ); printf_s( "Integer: = %d\n", i ); printf_s( "Real: = %f\n", fp ); }
对于多个字符串读入的情况,代码如下:
sscanf_s(inputString,"%s.%s.%s.%s", s1, s1.length, s2, s2.length, s3, s3.length, s4, s4.length);
sscanf 函数非常好用,居然我以前一直不知道这个函数。最近朋友用 VS2008写程序时用到这个函 数的安全版本 sscanf_s ,却出现异常问题,无法解析字符串不说,还会崩溃。 int sscanf_s( const char *buffer, const char *format [, argument ] ... ); 这是 MSDN 里面关于函数的定义,没有继续详细查看后面的备注,以及实例的情况下。根本感觉不到 sscanf 与 sscanf_s 的区别。以为仍然是像 sscanf 一样使用,以致出现奇怪问题。
Example: // crt_sscanf_s.c // This program uses sscanf_s to read data items // from a string named tokenstring, then displays them. #include