比较数组指针时出现问题

uda*_*ran 0 c

我正在尝试使用数组指针在c中编写程序...

我的目标是在标头值相同时打印错误消息.将通过命令行参数获取标头值.

如果我得到相同的标题值,即)(GET和GET)或(HEAD和HEAD),它应该打印有效,而对于所有其他情况,它应该打印无效.

我写的程序打印无效的所有组合.我不明白我在哪里弄错了.

int main(int argc,char *argv[])
{
        char *str1[4] = { "GET","HEAD","POST","OPTIONS"};
        char *str2[2] = {NULL};
        char *string = argv[1];
        const char s[2] = ",";
        char *token = "";

        int i = 0,j = 0,k = 0,l = 0,m = 0;

        token = strtok(string, s);
        while( token != NULL )
        {
              if(i < 2)
              {
                str2[i] = token;
                //printf( " %s\n", token );
                printf("str2[%d]= %s\n",i,str2[i]);
              }
              i++;
              token = strtok(NULL, s);
        }
        for(l = 0;l < 4;l++)
             printf("str1[%d] = %s\n",l,str1[l]);

        for( m = 0; m < 2;m++)
             printf("str2[%d] = %s\n",m,str2[m]);


        for(j = 0; j < 4;j++)
        {
                for(k =0; k < 2;k++)
                    {
                        if(str2[k] != str1[j])
                                printf("Invalid :: %s  and %s\n",str2[k],str1[j]);
                        else
                                printf("Valid :: %s and %s\n",str2[k],str1[j]);
                }
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译代码并获得这样的输出

bash-3.2$ gcc -o  arraypointer arraypointer.c
bash-3.2$ ./arraypointer GET,HEAD
str2[0]= GET
str2[1]= HEAD
str1[0] = GET
str1[1] = HEAD
str1[2] = POST
str1[3] = OPTIONS
str2[0] = GET
str2[1] = HEAD
Invalid :: GET  and GET
Invalid :: HEAD  and GET
Invalid :: GET  and HEAD
Invalid :: HEAD  and HEAD
Invalid :: GET  and POST
Invalid :: HEAD  and POST
Invalid :: GET  and OPTIONS
Invalid :: HEAD  and OPTIONS
Run Code Online (Sandbox Code Playgroud)

但预期的产出是

如果我得到相同的标题值((GET和GET)或(HEAD和HEAD),它应该打印有效.但它的打印无效.

有人可以帮我解决吗?

Ant*_*hev 6

使用strcmp,而不是比较比较指针的字符串.指针只有在指向同一地址时才相等.