【问题标题】:strcmp of array of strings and stringstrcmp 字符串数组和字符串
【发布时间】:2014-01-23 04:31:45
【问题描述】:

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

【问题讨论】:

  • 你将每个新值读入nam,但之前设置的所有指针也都指向nam,所以字符串都是一样的。如果您希望同时使用不同的值,则必须为每个字符串分配单独的存储空间。
  • 这不是吗? char *strings[100]

标签: c strcmp


【解决方案1】:

我不明白您是如何收到错误的。我就是这样测试的

#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

【讨论】:

  • 你的代码只运行一次,它不会覆盖旧值,所以它是正确的。
  • 你能把你的贴出来让我看看。我不知道你是怎么处理变量值的。
  • 你可以看到上面的答案。
  • 谢谢你。我能够找出我的问题,只是不确定如何解决它。
  • 分段错误(核心转储),如果不喜欢我的 for 循环中的 if 语句。我将根据我的哈希函数将值随机放入字符串中,因此我想检查我的整个数组是否 nam 已经存在于我的字符串数组中。我不知道如何解决这个问题。
【解决方案2】:

你应该 malloc 为 nam 或 strings[k] 保持值,在 while 循环中,当 nam 改变时,strings[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);
}

【讨论】:

  • 我添加了 for 循环,以便您更好地理解我的问题。
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多