为什么我的 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;
}
答案:
- if-else 块中不需要
continue;
。
- 您需要在
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;
}
我正在尝试用 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;
}
答案:
- if-else 块中不需要
continue;
。 - 您需要在
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;
}