为什么我的 for 循环会增加 C 中数组的大小?

Why is my for loop increasing the size of my array in C?

我正在尝试用 c 语言制作一个二进制数计算器,我 运行 遇到了我的 for 循环问题,将我的第二个数组的大小加倍并将第一个数组添加到末尾。我真的很困惑,因为我认为你不能在已经声明后增加尺寸。它也发生在我的方程式读取函数中,但在这个补码函数中它更容易看清。关于如何解决此问题的任何想法?the codethe output

欢迎来到 stack-overflow。从下次开始,请使用内联代码编辑器来放置您的代码而不是图像。我已经努力将您的代码放在答案本身中来解释问题。请将此视为礼貌。这样做很不寻常。但是因为你是新成员,我正在做。

// Cole carson's original code from image:
char * onescomp(char x[16], char y[16]){
    int i;
    for(i=0;i<=15;i++){
        if(x[i] == '0'){
            y[i] = '1';
            continue;
        }
        else if(x[i] == '1'){
            y[i] = '0';
        continue;
        }
    }
    return y;
}
int main()
{
    char b3n[16]={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
    char cb3n[16];
    puts(b3n);
    onescomp(b3n,cb3n);
    puts(cb3n);
    return 0;
}

答案:

  1. if-else 块中不需要 continue;
  2. 您需要在 cb3n 数组的最后一个单元格中添加 '[=13=]'。所以 puts() 知道字符串何时结束并停止打印。

因此,要快速解决此问题,您可以创建包含额外单元格的数组并将所有值分配为 '[=13=]'。所以在复制了 15 个 1 之后,最后会有 '[=13=]'。我认为在您的情况下,打印的那些额外的零可能是垃圾值。看起来 array 正在加倍,但事实并非如此,它只是打印超出分配内存的值,因为尚未提供 '[=13=]'

//Quick fix
int main()
{
    char b3n[16]={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
    char cb3n[17]={'[=11=]'}; // <--- quick fix
    puts(b3n);
    onescomp(b3n,cb3n);
    puts(cb3n);

    return 0;
}