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

Die*_*vel 1 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);
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*ger 5

strlen弄清楚到第一个为止有多远'\0'。在第一个循环中,'\0'在字符串的开头插入a 。然后检查循环条件,lo和belook strlen(numeros)0(因为第一个字符现在是NUL终止符),并且y(现在带有value 1)大于该值,因此就可以了。

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

memset(numeros, '\0', strlen(numeros));
Run Code Online (Sandbox Code Playgroud)

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

for (int i = 0; numeros[i]; ++i) {
    numeros[i] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

的结束条件numeros[i]意味着它在达到已经为NUL的值时停止,在搜索时将非NUL值清零。