我的代码中有这样的内容:
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;所以我可能做错了什么。比较这些字符串的正确方法是什么?
答案 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 */
}
}