1.main函数的参数用法
之前上学所写的main函数大都为void mian() ,int main(),均为涉及其参数的使用。
(1)main(int argc, char *argv[])
其中argc为传给main()命令行的参数个数,argv为指针数组,元素个数为argc,存放指向每一个参数的指针,argv[0]为编译生成的可执行文件名。
2.sscanf函数,注意是两个s,不是scanf函数
- 意义:从一个字符串中读取与指定格式相符的数据,以固定字符串作为输入源,而scanf则是以屏幕(stdin)作为输入源
- 格式:int sscanf(const char *buffer, const char *format, [argument]...)
- 其中format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}
- * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中。
- {a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
- width表示读取宽度。
- {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
- type :这就很多了,就是%s,%d之类。
- 特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值 。
- 其中format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}
- 用法
-
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 static void sscanf_test(void); 6 7 static void sscanf_test(void) 8 { 9 int ret; 10 char *string; 11 int digit; 12 char buf1[255]; 13 char buf2[255]; 14 char buf3[255]; 15 char buf4[255]; 16 17 /*1.最简单的用法*/ 18 string = "china beijing 123"; 19 ret = sscanf(string, "%s %s %d", buf1, buf2, &digit); 20 printf("1.string=%s\n", string); 21 printf("1.ret=%d, buf1=%s, buf2=%s, digit=%d\n\n", ret, buf1, buf2, digit); 22 /* 23 **执行结果: 24 **1.ret=3, buf1=china, buf2=beijing, digit=123 25 **可以看出,sscanf的返回值是读取的参数个数 26 */ 27 28 /*2.取指定长度的字符串*/ 29 string = "123456789"; 30 sscanf(string, "%5s", buf1); 31 printf("2.string=%s\n", string); 32 printf("2.buf1=%s\n\n", buf1); 33 /* 34 **执行结果: 35 **2.buf1=12345 36 */ 37 38 /*3.取到指定字符为止的字符串*/ 39 string = "123/456"; 40 sscanf(string, "%[^/]", buf1); 41 printf("3.string=%s\n", string); 42 printf("3.buf1=%s\n\n", buf1); 43 /* 44 **执行结果: 45 **3.buf1=123 46 */ 47 48 /*4.取到指定字符集为止的字符串*/ 49 string = "123abcABC"; 50 sscanf(string, "%[^A-Z]", buf1); 51 printf("4.string=%s\n", string); 52 printf("4.buf1=%s\n\n", buf1); 53 /* 54 **执行结果: 55 **4.buf1=123abc 56 */ 57 58 /*5.取仅包含指定字符集的字符串*/ 59 string = "0123abcABC"; 60 sscanf(string, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3); 61 printf("5.string=%s\n", string); 62 printf("5.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3); 63 /* 64 **执行结果: 65 **5.buf1=123, buf2=abc, buf3=ABC 66 */ 67 68 /*6.获取指定字符中间的字符串*/ 69 string = "ios<android>wp7"; 70 sscanf(string, "%*[^<]<%[^>]", buf1); 71 printf("6.string=%s\n", string); 72 printf("6.buf1=%s\n\n", buf1); 73 /* 74 **执行结果: 75 **6.buf1=android 76 */ 77 78 /*7.指定要跳过的字符串*/ 79 string = "iosVSandroid"; 80 sscanf(string, "%[a-z]VS%[a-z]", buf1, buf2); 81 printf("7.string=%s\n", string); 82 printf("7.buf1=%s, buf2=%s\n\n", buf1, buf2); 83 /* 84 **执行结果: 85 **7.buf1=ios, buf2=android 86 */ 87 88 /*8.分割以某字符隔开的字符串*/ 89 string = "android-iphone-wp7"; 90 /* 91 **字符串取道'-'为止,后面还需要跟着分隔符'-', 92 **起到过滤作用,有点类似于第7点 93 */ 94 sscanf(string, "%[^-]-%[^-]-%[^-]", buf1, buf2, buf3); 95 printf("8.string=%s\n", string); 96 printf("8.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3); 97 /* 98 **执行结果: 99 **8.buf1=android, buf2=iphone, buf3=wp7 100 */ 101 102 /*9.提取邮箱地址*/ 103 string = "Email:[email protected]"; 104 sscanf(string, "%[^:]:%[^@]@%[^.].%s", buf1, buf2, buf3, buf4); 105 printf("9.string=%s\n", string); 106 printf("9.buf1=%s, buf2=%s, buf3=%s, buf4=%s\n\n", buf1, buf2, buf3, buf4); 107 /* 108 **执行结果: 109 **9.buf1=Email, buf2=beijing, buf3=sina, buf4=com.cn 110 */ 111 112 /*10.过滤掉不想截取或不需要的字符串--补充, 113 **在%号后面加一*号,代表过滤这个字符串,不读取 114 */ 115 string = "android iphone wp7"; 116 sscanf(string, "%s %*s %s", buf1, buf2); 117 printf("10.string=%s\n", string); 118 printf("10.buf1=%s, buf2=%s\n\n", buf1, buf2); 119 /* 120 **执行结果: 121 **10.android wp7 122 */ 123 } 124 125 int main(int argc, char **argv) 126 { 127 sscanf_test(); 128 129 return 0; 130 } 131 132 /*
-