2016-04-21 77 views
0

我一直在研究如何合併數組,並使用可變參數創建函數。然後它讓我想到,'我不能把兩者結合起來嗎?'。我想出了這個功能。根據我的理解,它應該工作,但我得到的錯誤。誰能告訴我我做錯了什麼?如何合併傳遞給具有可變參數的函數的數組

#include <stdio.h> 
#include <stdarg.h> 

char* merge(int num, ...) 
{ 
    va_list list; 
    char arr[9] = {0}; 
    char *temp; 
    int i; 
    int j; 
    int k=0; 

    va_start(list,num); 

    for(i=0;i<num;i++) 
    { 
     temp = va_arg(list,char[]); 
     j = 0; 
     while(temp[j] != 0x00) 
     { 
      arr[k] = temp[j]; 
      j++; 
     } 
     k++; 
    } 
    va_end(list); 
    return arr; 
} 

int main() 
{ 
    char data_1[] = "my"; 
    char merged_array[9] = "legs"; 
    int n=0; 

    //merged_array = merge(1, data_1); 
    while(merged_array == 0x00) 
    { 
     printf("%s\n",merged_array[n]); 
     n++; 
    } 
} 
+0

你覺得有發生'arr'在函數返回時? – Olaf

+1

畢竟這裏需要變量參數?我想你正在試驗stdarg – sjsam

+0

@Olaf我認爲arr的地址傳遞給merged_array並且arr被銷燬。 – Caleb

回答

0

或許這將幫助你開始:

#include <stdio.h> 
#include <string.h> 
#include <stdarg.h> 

char* merge(char *arr, int num, ...) 
    { 
    va_list list; 
    int i; 

    va_start(list,num); 
    for(i=0;i<num;i++) 
     strcat(arr, va_arg(list,char *)); 
    va_end(list); 

    return arr; 
    } 

int main() 
    { 
    char data_1[] = "my"; 
    char merged_array[9] = "legs"; 

    merge(merged_array, 1, data_1); 
    printf("%s\n", merged_array); 

    return(0); 
    } 
+0

謝謝。我會嘗試。 – Caleb

相關問題