比较字符串数组中的特定字符串

时间:2015-12-04 10:10:01

标签: c arrays string compare

我的代码中有这样的内容:

char *objects[] = {"_muldi3.o","_negdi2.o","_lshrdi3.o","_divdi3.o","_moddi3.o","_udivdi3.o"};
/* Around 127 strings stored above, listed only few here. */

char *divmod_objs[]={"_divdi3.o","_moddi3.o","_udivdi3.o"};

for (i=0;i<obj_count;i++) 
{
    if (objects[i]==divmod_objs[0]) 
        break;
    else
    {
        /* do something */
    }
}

if 语句似乎给出&#34;分段错误(核心转储)&#34;所以我可能做错了什么。比较这些字符串的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

分段错误基本上意味着指针访问它的边界之外的内存(它的分配内存区域)。

您的代码中存在核心错误,您希望等于运算符[0..(obj_count-1)]能够以Java或C#的方式比较字符串。但是字符串的比较不像C中的那样。相反,你要尝试将“对象”数组指针所指向的第一个字符串的divmod_objs个char元素与第一个字符进行比较。第一个字符串由“obj_count”指针指向。由于对象中的字符串最终可能是> {{1}},在这种情况下是一个seg。错误被抛出。

如果要在C中实现字符串比较,则需要逐个字符地实现比较。

基本上你需要一个双循环,外部循环遍历字符串对象,内部循环将在各个字符串的字符内迭代。加上一些花里胡哨来检查阵列边界等。

答案 1 :(得分:0)

编写简单函数来比较字符串:

bool equal(char a[], char b[])
{
    for (int i = 0; a[i] != '0' && b[i] != '0'; i++) {
        if (a[i] != b[i]) return false;   
    }
    return true;
}

并在您的代码中使用它:

char *objects[] = {"_muldi3.o","_negdi2.o","_lshrdi3.o","_divdi3.o","_moddi3.o","_udivdi3.o"};
/* Around 127 strings stored above, listed only few here. */

char *divmod_objs[]={"_divdi3.o","_moddi3.o","_udivdi3.o"};

for (i=0;i<obj_count;i++) 
{
    if (equal(objects[i], divmod_objs[0])) 
        break;
    else
    {
        /* do something */
    }
}