在C中更改数组中元素的值

在C中更改数组中元素的值,c,arrays,loops,C,Arrays,Loops,我的程序在代码中达到此函数时崩溃。我在函数中打印了要输入的数组,并注释掉了所有其他内容 他们正在正确地通过考试。我不明白它为什么会在这里坠毁 数组是按升序排列的数字 可能是我的循环,或者如果语句不正确?我想当数组到达attackerArmy[d]=“0”时,可能我没有正确地更改索引“d”处的数组中的值//将0表示为失败的 long int defeatedArmies(long int* attackerArmy, long int* defenderArmy, long int size){

我的程序在代码中达到此函数时崩溃。我在函数中打印了要输入的数组,并注释掉了所有其他内容 他们正在正确地通过考试。我不明白它为什么会在这里坠毁

数组是按升序排列的数字
可能是我的循环,或者如果语句不正确?我想当数组到达
attackerArmy[d]=“0”时,可能我没有正确地更改索引“d”处的数组中的值//将0表示为失败的

long int defeatedArmies(long int* attackerArmy, long int* defenderArmy, long int size){

    long int i,j,defeated = 0,d;

    for(i=0;i<size;i++){
        for(j=0;j<size;j++){

        //loop for the highest attack value that is lower than defender
            if(attackerArmy[j] < defenderArmy[i])
                d = j; // save the index where it is highest

            if(attackerArmy[j] > defenderArmy[i])
            //no point in checking unnecessary values
                break;
        }
        attackerArmy[d] = '0'; //represent 0 as defeated
    }

    for(i=0;i<size;i++){
        if(attackerArmy[i] == 0) //count how many defeated armies happened
            defeated++;
    }
return defeated;
}
long int击败对手(long int*攻击,long int*防御,long int大小){
长整数i,j,等于0,d;

对于(i=0;i问题
如果
attackerArmy[j]>=defenderArmy[i]
为真,
d
保持未初始化状态,导致在
attackerArmy[d]=“0”;
中访问其值时出现未定义行为

可能的修复
声明时初始化
d

ex:

long int d = -1L;
...
if(d != -1L) attackerArmy[d] = '0';

啊,是的,没有想到。有一个修复程序。到目前为止还没有崩溃。但是现在当我尝试打印新阵列时(附件)其中一些东西在离开前两个循环后可以归零。它填充了一组不同的数字,而这两个数组中都没有before@Hispazn这听起来像是另一个问题。这是新的数字48(0x30)吗?您的意思是“0”而不是“0”还是“0”在附件的第[d]行中='0';?是:O你能给我解释一下“0”和0之间的区别吗?我知道\0只是空字符,是吗?@Hispazn
'0'
是可打印字符0的字符文字,它的值in不是零。(就像
'a'
是可打印字符a,它的ascii值不是零).
0
OTOH是值为0的整数文字。
'\0'
是ascii表中值为0的数字字符文字。