输出不同——无法理解逻辑

Outputs differing -- can't understand the logic

基本上,我创建了一个数组 'string',其中包含一些值,然后创建另一个数组 ('auxstring'),然后以相反的顺序存储初始数组的所有值。最后我把它们打印出来。

为什么当我按原样执行程序时,我得到的输出是垃圾?但是,如果我在 'string' 数组中放入另一个数字(即:{3,1,1,3,4})它工作正常(输出:43113)。

如果我添加这一行也能正常工作:

"printf("%d\n", sizeof(auxstring));"

就在 for 循环之前。

我确定这是非常基础的东西,但我想了解幕后发生的事情,以及为什么在初始字符串的末尾添加一个数字,或放置 printf,以某种方式输出准确的数字.

谢谢。

#include <stdio.h>
#include <string.h>

int main(void) {

    int i=0, j, l; 
    char string[] = {3,1,1,3}; 
    char auxstring[sizeof(string)];

    for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {

        auxstring[j] = string[i];
        i++; 
    }

for (l=0; l < sizeof(auxstring); l++) {
    printf("%d",auxstring[l]);
}



return 0;
}

循环条件应该是j >= 0.

现在您与 auxstring[0] 中的 uninitialized 值进行比较,后者是 indeterminate(并且看起来是随机的)。

for循环中的条件

for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
                                ^^^^^^^^^^^^^^^^^^

没有意义,因为至少数组 auxstring 没有初始化。

循环也很复杂,因为它使用两个变量作为索引。

回答变量 ijl 的类型应该是 size_t - 运算符返回值的类型 sizeof

程序可以这样看

#include <stdio.h>

int main(void) 
{
    char string[] = { 1, 2, 3, 4 };
    char auxstring[sizeof( string )];
    const size_t N = sizeof( string );

    for ( size_t i = 0; i < N; i++ )
    {
        auxstring[i] = string[N - i - 1];
    }

    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d", auxstring[i] );
    }

    return 0;
}

它的输出是

4321