我正在嘗試在 c 中制作一個二進制數計算器,但我遇到了我的 for 回圈將我的第二個陣列的大小加倍并將第一個陣列添加到末尾的問題。我真的很困惑,因為我認為您在宣告后無法增加大小。它也發生在我的方程讀取函式中,但是在這個補碼函式中它更容易看到。關于如何解決這個問題的任何想法?代碼輸出
uj5u.com熱心網友回復:
歡迎來到堆疊溢位。從下次開始,請使用行內代碼編輯器來放置您的代碼而不是影像。我已努力將您的代碼放入答案本身以解釋問題。請將此視為禮貌。這樣做是非常不尋常的。但是因為你是一個新成員,我正在這樣做。
// 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;
}
回答:
- 您不需要
continue;
if-else 塊。 - 您需要添加陣列
'\0'
的最后一個單元格。cb3n
所以puts()
知道字串何時結束并停止列印。
因此,要快速解決此問題,您可以使用額外的單元格創建陣列并將所有值分配為'\0'
. 所以在復制了十五個 1 之后,最后會有'\0'
。我認為在您的情況下,列印的那些額外的零可能是垃圾值。看起來陣列在加倍,但事實并非如此,它只是列印超出分配記憶體的值,因為'\0'
尚未提供。
//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]={'\0'}; // <--- quick fix
puts(b3n);
onescomp(b3n,cb3n);
puts(cb3n);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442967.html