簡體   English   中英

在C中搜索char *數組

[英]Search in array of char* in c

我正在嘗試找出掃描char * star值的過程出了什么問題。

struct Property  {
unsigned int shift;
int mask;
char * str[4];
 } 
human [] = {
{0, 1, {"fe", "ma"}},
{1, 1, {"du", "cl"}},
{2, 1, {"nh", "ha"}},
{3, 1, {"sk", "tr"}},
{4, 3, {"bn", "rd", "bw", "bk"}},
{6, 3, {"bu", "ge", "gy", "da"}},
};

int find(char*  w){
int i;
int j;
for (i = 0; i < (sizeof(human)/ sizeof(struct Property)); i++){
    for (j = 0; j < 4 ; j++){
            if (human[i].str[j] == w)
                return i;
    }
}
}


int main(){

char* w ;
scanf("%s", w);
int k = find(w);
printf("k is %d", k);
return 0;
}

Clion編譯器說“指針參數w可以是指向const的指針”。 因此,在我的main()中,我嘗試使用函數w掃描數組或char *。

更新建議。

struct Property {
unsigned int shift;
int mask;
char * st[4];
} human [] = {
    {0, 1, {"fe", "ma"}},
    {1, 1, {"du", "cl"}},
    {2, 1, {"nh", "ha"}},
    {3, 1, {"sk", "tr"}},
    {4, 3, {"bn", "rd", "bw", "bk"}},
    {6, 3, {"bu", "ge", "gy", "da"}},
};

int find(char*  w)
{
int i;
int j;
for (i = 0; i < (sizeof(human)/ sizeof(struct Property)); i++)
{
    for (j = 0; j < 4 ; j++)
    {
            if ((strcmp(human[i].st[j], w)) == 0)
                return i;
            else
                continue;
    }
}
return -1;
}


int main()
{

char* w = malloc(sizeof(char*));
scanf("%99s", w);
int k = find(w);
if (k != -1 )
    printf("k is %d", k);
if (k == -1) { printf("%s","Error");}
return 0;
}

仍然沒有輸出我真的相信,仍然有些問題

有幾個問題-

  • 將內存分配給w 將未初始化的指針傳遞給scanf其他方式是未定義行為。 (您也可以動態分配內存)

     char w[100]; if( scanf("%99s",w) != 1 ){ /* Handle error */ } 
  • 可以使用strcmp比較兩個字符串。 使用==運算符不是正確的方法。

     if ( strcmp(human[i].str[j], w) == 0 ) 
  • 同樣,您應該始終從函數中返回某些內容。 即使沒有匹配,它也應該返回一些東西。 但是您沒有遵守該合同。 編譯器抱怨。

     for(..){ ... } return -1; /* denoting invalid index - search failed*/ 
  • 您可以輕松地將參數作為const char *傳遞,因為您無需更改其值(字符串的內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM