为什么我的阵列没有正确清空?

时间:2019-09-12 02:30:58

标签: c arrays c-strings

所以我将这个主数组保存在一个时间数组中。然后,我使用'\ 0'来“删除”其内部的主数组。在这一点上,如果我打印主数组,它将只打印空白。但是,如果那样的话,我使用for喜欢主数组=时间数组。 x = 0 x <4 x ++时,它确实从另一个数组复制了四件事,但同时也打印了我执行“ \ 0”之前的内容

我尝试了一段时间的柜台,但也没有工作。香港专业教育学院以前使用\ 0,它的工作idk为什么现在不工作

for(int y = 0; y <= strlen(numeros); y++){
    numeros[y] = '\0';
}

printf("%s\n", numeros);

for(int z = 0; z <= 4; z++){
    numeros[z] = numerosTemp[z];
}
    printf("%s\n", numeros);

我的预期结果只是numerosTemp数组的前四个字母,但是它包含了我在\ 0之前曾经拥有的所有内容。但是在\ 0之后的printf中,它只会打印空白,所以我不明白为什么会发生这种情况

2 个答案:

答案 0 :(得分:5)

strlen计算出距第一个'\0'的距离。在第一个循环中,在字符串的开头插入一个'\0'。然后检查循环条件,瞧瞧,strlen(numeros)0(因为第一个字符现在是NUL终止符)和y(现在是值{{1 }})大于该值,就完成了。

如果您想将其归零,则可以存储原始的1并将其用于测试。或者,您可以完全删除循环,然后将其替换为strlen

memset

或者您可以将循环写为零,直到遇到NUL,将两次通过的解决方案变成一次通过的解决方案:

memset(numeros, '\0', strlen(numeros));

for (int i = 0; numeros[i]; ++i) { numeros[i] = '\0'; } 的结束条件意味着它在达到已经为NUL的值时停止,并在搜索时将非NUL值清零。

答案 1 :(得分:-3)

提示:


for(int y = 0; y <= strlen(numeros); y++){
    printf("blanking character %d\n", y);
    numeros[y] = '\0';
}

printf("%s\n", numeros);

for(int z = 0; z <= 4; z++){
    numeros[z] = numerosTemp[z];
}
    printf("%s\n", numeros);

对要打印的内容进行预测,然后将其与实际情况进行比较。

我待会儿再说。