我想在C中編寫一個函數,它需要兩個字符數組,交替地將數組元素組合成一個新數組,然後返回一個指向新數組的指針。將兩個給定數組交替組合成單個數組的函數
我的程序編譯得很好,但每次程序運行時都會產生不正確的不同輸出。
如果有人能幫忙指出我要出錯的地方,我會非常感激。
#include <stdio.h>
#include <stdlib.h>
char* altCombine(char[], char[], int, int);
int main(int argc, char** argv){
char arr1[4] = {'e','f','g', 'h'};
char arr2[4] = {'a','b','c','d'};
int size1 = 4;
int size2 = 4;
char* altArr;
altArr = altCombine(arr1, arr2, size1, size2);
for(int i = 0; i < 8; i++){
printf("%c \n", altArr[i]);
}
return 0;
}
char* altCombine(char arr1[], char arr2[], int size1, int size2){
int i = 0, a = 0, b = 0;
int totalSize = (size1 + size2);
char* nArr = malloc(sizeof(char) * totalSize);
char newArr[totalSize];
while(i < totalSize){
if(a < size1){
newArr[i] = arr1[a];
i++;
a++;
}
if(b < size2){
newArr[i] = arr2[b];
i++;
b++;
}
}
nArr = &newArr[0];
return nArr;
}
'NARR = newArr [0]; return nArr;' - >'return memcpy(nArr,newArr,totalSize);' – BLUEPIXY
'nArr =&newArr [0];''newArr'對'altCombine'是本地的,並且* out_of_scope *(並且釋放內存重複使用)。所以你的'nArr'指針指向返回'main'時不再存在的內存。 'memcpy(nArr,newArr,totalsize);'而不是'nArr =&newArr [0];'---什麼@BLUEPIXY說... –