gpt4 book ai didi

c - 看似随机的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:15 25 4
gpt4 key购买 nike

我正在尝试为一个非常简单的 MIPS 处理器制作一个简单的汇编程序。不幸的是,C 给我带来了很多麻烦,特别是 strcasecmp 没有返回有效/正确的结果。结果有时是正确的……但通常不是,我不明白为什么会出现这种情况。除了任何修复建议之外,有人可以解释为什么会出现这些错误吗?

注意 我不认为这个错误是由于通过了寄存器表。在convert register函数中声明register table也会出现同样的错误

谢谢!!!

应该返回与寄存器名称对应的值的函数。请注意,RegisterTable 是在 main 中声明的。我这样做是为了遍历并测试 main

表中的每个寄存器名称
int ConvertRegisterName(char * rname,REG_NAME_PAIR RegisterTable[32])
{
int i;
int j=0;
for (i=1; i<32; i++,i++)
{
if (!(strcasecmp(RegisterTable[i].reg_number,rname) & strcasecmp(RegisterTable[i].reg_name,rname)))
{
j=i;
return j;
break;
}
}

if(!j)
{
printf("Error with register name \n");
return j;
}
}

main 函数

int main(int argc,char *argv[])
{
REG_NAME_PAIR RegisterTable[32];
RegisterTable[1].reg_name = "at";
RegisterTable[1].reg_number = "$1";
RegisterTable[2].reg_name = "v0";
RegisterTable[2].reg_number = "$2";
RegisterTable[3].reg_name = "v1";
RegisterTable[3].reg_number = "$3";
RegisterTable[4].reg_name = "a0";
RegisterTable[4].reg_number = "$4";
RegisterTable[5].reg_name = "a1";
RegisterTable[5].reg_number = "$5";
RegisterTable[6].reg_name = "a2";
RegisterTable[6].reg_number = "$6";
RegisterTable[7].reg_name = "a3";
RegisterTable[7].reg_number = "$7";
RegisterTable[8].reg_name = "t0";
RegisterTable[8].reg_number = "$8";
RegisterTable[9].reg_name = "t1";
RegisterTable[9].reg_number = "$9";
RegisterTable[10].reg_name = "t2";
RegisterTable[10].reg_number = "$10";
RegisterTable[11].reg_name = "t3";
RegisterTable[11].reg_number = "$11";
RegisterTable[12].reg_name = "t4";
RegisterTable[12].reg_number = "$12";
RegisterTable[13].reg_name = "t5";
RegisterTable[13].reg_number = "$13";
RegisterTable[14].reg_name = "t6";
RegisterTable[14].reg_number = "$14";
RegisterTable[15].reg_name = "t7";
RegisterTable[15].reg_number = "$15";
RegisterTable[16].reg_name = "s0";
RegisterTable[16].reg_number = "$16";
RegisterTable[17].reg_name = "s1";
RegisterTable[17].reg_number = "$17";
RegisterTable[18].reg_name = "s2";
RegisterTable[18].reg_number = "$18";
RegisterTable[19].reg_name = "s3";
RegisterTable[19].reg_number = "$19";
RegisterTable[20].reg_name = "s4";
RegisterTable[20].reg_number = "$20";
RegisterTable[21].reg_name = "s5";
RegisterTable[21].reg_number = "$21";
RegisterTable[22].reg_name = "s6";
RegisterTable[22].reg_number = "$22";
RegisterTable[23].reg_name = "s7";
RegisterTable[23].reg_number = "$23";
RegisterTable[24].reg_name = "t8";
RegisterTable[24].reg_number = "$24";
RegisterTable[25].reg_name = "t9";
RegisterTable[25].reg_number = "$25";
RegisterTable[26].reg_name = "k0";
RegisterTable[26].reg_number = "$26";
RegisterTable[27].reg_name = "k1";
RegisterTable[27].reg_number = "$27";
RegisterTable[28].reg_name = "gp";
RegisterTable[28].reg_number = "$28";
RegisterTable[29].reg_name = "sp";
RegisterTable[29].reg_number = "$29";
RegisterTable[30].reg_name = "fp";
RegisterTable[30].reg_number = "$30";
RegisterTable[31].reg_name = "ra";
RegisterTable[31].reg_number = "$31";


int i;
for (i=1; i<32; i++)
{
printf("i is %d\n",i);
printf("Register Name is %s \n" ,RegisterTable[i].reg_name);
printf("this is the return value %d",ConvertRegisterName(RegisterTable[i].reg_name,RegisterTable));
printf("\n");
printf("Register Number %s\n",RegisterTable[i].reg_number);
printf("this is the return value %d",ConvertRegisterName(RegisterTable[i].reg_number,RegisterTable));
printf("\n");
printf("\n");
}
}

REG_NAME_PAIR 结构

typedef struct
{
char *reg_name;
char *reg_number;
} REG_NAME_PAIR;

最佳答案

转换函数可能会被简化并改正成这样:

int ConvertRegisterDesc(const char * token, REG_NAME_PAIR RegisterTable[])
{
for (int i = 1; i != 32; ++i)
{
if (strcasecmp(RegisterTable[i].reg_number, token) == 0 ||
strcasecmp(RegisterTable[i].reg_name, token) == 0 )
{
return i;
}
}

printf("Error with register name \n");
return 0;
}

现在 ConvertRegisterDesc("foo", RegisterTable) 返回名称值为(大小写变体)"foo"< 的条目的索引,如果找不到这样的条目,则为 0

关于c - 看似随机的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com