我的strcmp没有';当它应该返回0时,它不会返回0

我的strcmp没有';当它应该返回0时,它不会返回0,c,matrix,strcmp,C,Matrix,Strcmp,上下文:我正在搜索2d数组中包含的所有单词(水平、垂直和对角) 所以我要做的是获取所有可能的单词,检查它们是否在给定的字典中,以及它们是否存储在数组中。问题是,我不希望它有重复的 下面是一段代码: for (i=l-1;i>=0;i--){ palavra[aux]=mat[i][caux]; for (j=i;j>=0;j--){ palavra[aux]=mat[j][caux];

上下文:我正在搜索2d数组中包含的所有单词(水平、垂直和对角)

所以我要做的是获取所有可能的单词,检查它们是否在给定的字典中,以及它们是否存储在数组中。问题是,我不希望它有重复的

下面是一段代码:

        for (i=l-1;i>=0;i--){
            palavra[aux]=mat[i][caux];
            for (j=i;j>=0;j--){
                palavra[aux]=mat[j][caux];
                palavra[aux+1]='\0';
                for (it=0;encontradas[it]!=NULL;it++){
                    if (strcmp(palavra,encontradas[it])==0)flag=1;
                    else flag=0;
                }
                if (flag==0) {
                    r = palavra_existe(dic,palavra);
                    if (r!=0) {
                        found[auxenc]=mystrdup(palavra);
                        auxenc++;
                    }
                }
                flag=0;                 
                aux++;
            }
            aux=0;
        }       

该行用于检查是否已经找到格式的单词,以避免创建重复。问题是它不起作用,但仍然会出现重复项(因为flag变量的值永远不会为1)


这里可能缺少什么?

变量
确实获得值
1
,但在下一次迭代中,它再次返回到
0

在循环之前将
标志设置为零,当找到匹配项时,将其设置为
1
并退出循环:

flag = 0;
for (it = 0; encontradas[it] != NULL; it++) {
  if (strcmp(palavra,encontradas[it]) == 0) {
    flag=1;
    break;
  }
}

(逻辑工作不需要退出循环,但一旦找到匹配项,就没有必要在其余项之间循环。)

如何填充
encontradas
呢?它从来没有设置为1,还是重置为0?在不研究周围逻辑的情况下,当
strcmp()
发出值相等的信号时,不仅要将
flag
设置为1,而且每次发现值不相等时都要将其设置回0。
flag = 0;
for (it = 0; encontradas[it] != NULL; it++) {
  if (strcmp(palavra,encontradas[it]) == 0) {
    flag=1;
    break;
  }
}