strcmp的字符串和字符串数组

时间:2014-01-23 04:31:45

标签: c 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");
}

它也不喜欢这个。我认为我在不存在的值上得到一个null,所以这可以工作。

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

2 个答案:

答案 0 :(得分: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;
}

OUTPUT -

ansh
ansh
0

答案 1 :(得分:0)

你应该使用malloc for nam或者字符串[k]来保持值,在while循环中,当nam改变时,字符串[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);
}