2014-01-23 30 views
0

有人可以告訴我什麼是錯誤的strcmp?我不明白爲什麼在比較字符串和字符串數組時遇到分段錯誤。strcmp的字符串和字符串數組

我想出了我的問題只是不知道如何去解決它。我最終會根據我的散列函數將nam放入字符串中。在我這樣做之前,雖然我想檢查我的字符串是否已經存在於我的字符串數組中。如果它不存在,我想把它放入數組中。如果它確實存在,我不想把它放入我的數組中。所以我猜測,當我使用strcmp對一個不存在的值,我得到null。有處理這個問題的好方法嗎?

char *strings[100]; 
char nam[100]; 
int g = 0; 
while (fscanf(pFile, "%s %d", nam, &val) !=EOF) 
{ 

    strings[k] = nam; 
    printf(" string is %s .\n", strings[k]); 
    k++; 
    i = 0; 
    g = (int) strcmp (strings[0], nam); 
    printf("g is %d \n", g); 
    for(i = 0; i < 5; i++) 
    { 
     if(strcmp (strings[i], nam) == 0) 
     { 
      printf(" strings[i] is equal"); 
     } 
    } 
    printf(" Bust out"); 
} 

它也不喜歡這樣。我想我得到了不存在的值的空值,所以這將工作。

for(i = 0; i < 5; i++) 
{ 
    if(strcmp (strings[i], nam) == '\0') 
    { 
     printf(" strings[i] is equal"); 
    } 
} 
+0

您將每個新值讀入'nam',但所有先前設置的指針也指向'nam',所以字符串都是相同的。如果您希望一次提供所有不同的值,則必須爲每個字符串分配單獨的存儲空間。 –

+0

不是這樣做嗎? 'char * strings [100]' – cokedude

回答

0

我不明白你是如何得到一個錯誤。這是我測試過

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char *strings[100]; 
    char nam[100]; 

    strcpy(nam, "ansh"); 
    strings[1] = nam; 

    printf("\n%s", nam); 
    printf("\n%s", strings[1]); 

    int k = strcmp(nam, strings[1]); 
    printf("\n%d\n", k); 
return 0; 
} 

輸出 -

ansh 
ansh 
0 
+0

你的代碼只運行一次,它不會覆蓋舊值,所以它會是正確的。 – Nibnat

+0

你可以發佈你的,讓我可以看看。我不知道你是如何去了解變量的值。 –

+0

你可以看到更高的答案。 – Nibnat

0

你應該爲malloc的南或字符串[K]保持值,while循環,當南的變化,串[K]將指向某處不明。

char *strings[100]; 
char nam[100]; 
int g = 0; 
while (fscanf(pFile, "%s %d", nam, &val) !=EOF) 
{ 
    char *tmp = malloc(strlen(nam) + 1); 
    strcpy(tmp , nam); 
    strings[k] = tmp; 

    printf(" string is %s .\n", strings[k]); 
    k++; 
    g = strcmp (strings[i], nam); 
    printf("g is %d \n", g); 
} 
+0

我添加了我的for循環,以便您更好地理解我的問題。 – cokedude