有人可以告诉我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");
}
}
答案 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);
}