C语言中字符串数组的遍历和比较

/* The list of known types of default packet. */
static char  *_default_packet_types[] = {
    "ddos client quota",       "ddos server quota",
    "blocked ports",           "blocked sites",
    "ip scan",                 "port scan",
    "ip source route",         "icmp flooding",
    "ike flooding",            "ipsec flooding",
    "ip spoofing sites",       "syn flooding",
    "udp flooding",            "tcp syn checking failed",
    NULL
};

// 自己写的函数,用packetTable中的->_msg, 和上面的_default_packet_types里的元素进行比较,如果相等则跳出,否则继续循环

boolean pr_get_default_packet_flag_from_msg(PacketFilterMessageTable *packetTable, char **packetType)
{
    char         *p_msg = NULL;
    wgpr_boolean  flag = FALSE;
    char        **type_ptr = NULL;
   
    /* Sanity check */
    if (!packetTable) {
        return flag;
    }

if (packetTable->_tag_id != FWDENY_TAG ||
        packetTable->_msg == NULL          ||
        packetTable->_msg[0] == ‘\0‘) {
        return flag;
    }

p_msg = packetTable->_msg;

for (type_ptr = _default_packet_types; *type_ptr != NULL; type_ptr++) {
        if (!strncasecmp(p_msg, *type_ptr, sizeof(*type_ptr) - 1)) {
            flag = TRUE;
            break;
        }
    }
    *packetType = flag == TRUE ? DEFAULTPACKET : DENIEDPACKET;
    return flag;
}

//调用上述函数的代码片段

if(pr_get_default_packet_flag_from_msg(pk_t, &packetType)){
                        is_dflt_packet = TRUE;
                    }

时间: 2024-10-18 03:40:43

C语言中字符串数组的遍历和比较的相关文章

C语言中字符数组和字符串指针分析

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序: #include <stdio.h> int main(int argc, char *argv[]){ char day[15] = "abcdefghijklmn";  char* strTmp = "opq

D语言中字符串的操作

字符串的操作在软件开发中是特别重要的一个事情,因为基本上的编程都会使用到字符串,字符串操作的好坏决定着一个语言的好与差.在我做过的一个项目中曾经就出现过字符串操作性能问题. D语言字符串有 string,wstring,dstring三种类型,在D语言中字符串是使用字符数组定义的,三种类型分别对应char,wchar,dchar.char只有一个字节,wchar为双字节,dchar为三字节.对字符串的操作也相当于是对数组的操作,这跟其它语言不一样,C++中字符串是以string类来进行封装,它的

c语言中的数组名代表的意义

数组名是数组的首地址,就是数组中的第一个元素的地址,是常量.常量是不能值在=的左边的.数组和指针的区别在于,指针是变量,是用来存储指向数据的地址的变量,而数组名是常量.一般情况下申明一个数组,比如char  a[10]; 之后  数组名a都是数组的首地址,是一个地址常量.但是在函数申明的形参列表中除外,比如: int  fo(char []); 在这种情况下的申明与 int  fo(char a[]); int  fo(char *a); 是等价的,就是说在这种情况下,就算你写的是数组的形式,编

c语言中字符串的匿置 超级简单

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char * src = "hello,world"; printf("%d", src[10]); char *dest = NULL; //开辟内存空间 然后多开辟一个用来存储字符串的结束符 dest= (char *)mal

Java语言中的----数组

day07  Java语言中的--数组 一.数组的概述: 什么是数组?数组是干什么用的?为啥要学数组?这些都是疑问.再你学完数组以后就知道了,数组是存储在相邻内存位置的单一数据类型的元素集合.什么是单一数据类型?就是在你定义数组的时候的数据类型,就只能存储这一个类型的数组.那么我们访问他的时候就直接通过指定数组的名字和下标就可以直接访问数组元素了. 二.数组: 1.定义数组         数据类型 数组名[] = new  数据类型[内存数据大小]         int a[] = new 

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

《C语言中动态数组的创建及引用》

C语言中动态数组的创建及引用 动态数组是相对于静态数组而言的,静态数组的长度是预定义好的,在整个程序中,一旦给定了数组大小后就无法改变,,而动态数组则不然,它可以根据程序需要重新指定数组的大小.动态数组的内存空间是由堆动态分配的,通过执行代码为其分配储存空间,只有程序执行到分配语句时,才为其分配储存空间. 对于动态数组,其创建比静态数组更麻烦一些,使用完必须由程序员自己释放,否则将引起内存泄漏,但是其使用非常灵活,能根据程序需要动态分配大小,因此相对于静态数组来说,使用动态数组的自由度更大. 对

【示例】C语言中利用数组存放函数指针

C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: int max(int,int); // 声明函数,比较两数大小 int (*p)(); //声明指向函数的指针变量 p=max; //将函数max的入口地址赋给指针变量p int c=(*p)(a,b); //调用函数 2.函数指针作为函数参数 该例子中每次给process函数不同实参(函数名)