美文网首页程序员我爱编程C语言
C语言基础深入之常用常错函数新读

C语言基础深入之常用常错函数新读

作者: 你的社交帐号昵 | 来源:发表于2018-05-05 15:09 被阅读0次

    先说说原有代码的功能,根据MAC地址来更新维护的ARP表。

    你还在为没有学习平台而苦恼吗?你还在为没有学习资料而烦心吗?你还在为没人指导而担忧吗?可以私信小编 C++或者 加群 710520381 验证灵狐,为你提供学习的平台和资料。

    原理很简单:读取文件“proc/net/arp”,然后对文件内容进行解析,后续进行相应的操作。这里只是根据自己的回忆对模糊的知识点进行总结。

    1)打开文件`proc/net/arp`,获取ARP信息。具体如下图:

    arp

    这里比较简单,需要注意的就是文件操作完毕后记得fclose()释放相关资源。

    2)getline()按行读取文件内容

    gcc扩展定义的函数。

    它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。

    函数定义如下:

    ssize_t getline(char **lineptr, size_t *n, FILE *stream);

    需要注意的是参数指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放.

    3)strtok()使用

    字符串分割函数,不可重入,函数原型如下:

    char* strtok (char* str,constchar* delimiters );

    函数返回值:当s中的字符查找到末尾时,返回NULL;

    如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。

    请注意,并不是不存在要查找的分隔符时才返回NULL。

    4)strtol()函数的使用

    完成不同进制之间的转换。

    5)ssanf()的使用

    其作用是按照固定格式读取字符串。常见的用法相信大家都比较熟悉了,这里简单复习一下。

    常见的用法如下:

    C++char buf[512] = {0};

    sscanf("123456 ", "%s", buf);//123456

    自己很少用的是有关sscanf中相关正则匹配。

    sscanf()函数原型如下:

    int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

    其中,format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}。

    1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

    2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

    3、width表示读取宽度。

    4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。5、type :这就很多了,就是%s,%d之类。

    6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值

    例如本程序中

    sscanf(szLine, "%s%*s%*s%s", szIPAddr, szHWAddr);

    将szLine中的第二个,第三个字符串过滤掉。

    完整代码如下:

    输出结果如下:

    相关文章

      网友评论

        本文标题:C语言基础深入之常用常错函数新读

        本文链接:https://www.haomeiwen.com/subject/oxxerftx.html