我想將a1和添加a2到第三個陣列中,a3. 但是,它不能正常作業。
運行以下代碼時,輸??出為:
1 2 3 4 5 5 88237492 23928392 23234242 343344.
這是為什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 30
int main(){
int a1[]={1,2,3,4,5};
int a2[]={1,2,3,4,5};
int a3[10];
int i=0;
int k=0;
int j=0;
while(i<sizeof(a1)/sizeof(int))
{
a3[i]=a1[i];
i ;
}
while(j<sizeof(a2)/sizeof(int))
{
a3[i]=a2[j];
j ;
}
while(k<sizeof(a3)/sizeof(int))
{
printf("%d ",a3[k]);
k ;
}
return 0;
}
uj5u.com熱心網友回復:
我認為其他人已經回答了這個問題,但我想再添加一件可以幫助您將來的事情。正如您已使用int a3[10] = {}. 這將用零初始化您的陣列。然后它變得容易除錯。
如果您使用了這種格式,那么您的程式的輸出將是[1,2,3,4,5,5,0,0,0,0]這樣,那么在未分配 5 個值之后就很容易進行除錯。因此,它很容易可視化并節省時間。
uj5u.com熱心網友回復:
您不會在第二個回圈中增加目標索引while。因此,該a3[i]=a2[j];回圈中的行將始終寫入相同的位置(在您的情況下,是 的第六個元素a3,因此您最終會得到該元素的最后一個值是 ,a2而所有其他元素都保持原始未初始化狀態)。
要解決此問題,請i在第二個回圈中增加索引,如下所示:
while(j<sizeof(a2)/sizeof(int))
{
a3[i]=a2[j];
j ;
i ; // Need to increment destination index, also!
}
或者——也許更清晰——使用i和j值的總和作為目標陣列元素的索引:
while(j<sizeof(a2)/sizeof(int))
{
a3[i j]=a2[j]; // Destination index will be "j" offset from last "i"
j ;
}
uj5u.com熱心網友回復:
看看你的第二個回圈。您反復分配a2to a3[5](i停留在 5) 的值。其余的a3仍然未初始化,因此是奇怪的值。
您可能還想將 for 回圈用于此類事情
uj5u.com熱心網友回復:
由于問題是關于joining two array's into third one. 如果你想要一個有效的替代方案,你可以直接使用memcpy()fromstring.h頭檔案復制每個陣列的記憶體。但是您在使用它時應該非常小心,因為您可能會覆寫任何其他可能導致segmentation fault. 請在下面找到完整的實作。
#include<stdio.h>
#include<string.h>
int main()
{
int a1[] = {1, 2, 3, 4, 5};
int a2[] = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
int a3[17] = {0}; //initializes all elements to 0.
//make a3
memcpy(a3, a1, sizeof(a1));
memcpy(&a3[sizeof(a1)/sizeof(int)], a2, sizeof(a2));
//print a3
for(int i=0; i<sizeof(a3)/sizeof(int); i )
printf("%d\n", a3[i]);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318704.html
上一篇:在javascript中使用for回圈進行二進制搜索
下一篇:C 中兩個排序陣列的并集
