Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        3年前关闭。
                                                                                            
                
        
我只是学习数组。因此,我尝试编写一个简单的练习,该函数应检查给定参数(或更多参数)是否在已定义的数组中。
像这样:./main a-> list y

 int main( int argc, char* argv[] ){
 int i,n;
 char a[]={'a','5ab','na','8s'};
 for(i = 1; i < (argc); ++i){
    while (n < 4){
        if (argv[i] == a[n]){
            printf("y");
            break;
         }
    }
 }
return 0;

 }


运行这个,我得到警告:“隐式常量转换中的溢出”和“多字符字符常量[-Wmultichar]”
好吧,我想这与argv [i] == a [n]有关。我该如何纠正?

最佳答案

在C中,有两种与文本相关的数据类型:char和字符串。字符串是指向字符数组的指针,按照惯例,该字符以NUL字符('\ 0')结尾。 char是表示ASCII字符的单个字节。

通过编译在双引号和双引号之间包含的一系列字符来创建字符串文字:"this is a string literal"

另一方面,您可以通过在两个单引号之间编译单个字符表达式(可能带有反斜杠转义)来创建char文字,它们分别是“ t”,“ h”,“ e”,“ s”,“ e” ',',','a','r','e',','c,'h','a','r',',','l','i','t' ,“ e”,“ r”,“ a”,“ l”,“ s”,“ \ n”

在代码页和多字节字符编码出现之后,C增加了对“宽字符”(即,用于存储单个元素的8位以上)和“多字节字符”(即, ,是使用8位值的字符编码,但要编码单个字形需要多个字符)。

编译器看到您正在初始化数组的行:

char a[]={'a','5ab','na','8s'};


并且假设“ 5ab”,“ na”和“ 8s”是您尝试指定宽或多字节字符文字的尝试。它知道字符(不是字符串)用单引号引起来。它知道您使用的是char类型。所以这些不能是字符串。但是它们也不是多字节字符。

实际上,我认为您是要让它们成为字符串。您可能来自python,bash,perl或其他使用单引号分隔字符串的语言。但这不是C。

要创建字符串列表,您需要知道字符串的类型为char *(或const char *)。然后,您要创建它们的数组-这是您的列表:

const char *list_of_str[] = {
    "hello",
    "my name",
    "is George"
};


您会注意到argv是字符串列表。 ;-)

关于c - C:检查项目是否在列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36990480/

10-11 22:10
查看更多