2016-12-05 26 views
0

我環顧四周,但有很多不同的答案,C很混亂,所以我寧願問我的具體問題。如何在C中將數組分成兩部分(從開始到x,從x到結束)?

所以我們可以說我有一個這樣的數組:

[ls, -l, SPLIT, wc, -w] 

所以我想這個數組分成兩個不同的(焦炭)陣列是這樣的:

[ls, -l] [wc, -w] 

我用reallocmalloc

+0

你想其中一個數組是原始數組?然後兩個。否則,如果你想保持原始數組的原始狀態,那麼你需要分配兩個新的數組,爲此你可以使用任何一個函數。 –

+0

@Someprogrammerdude我想保留原始數組,是的。 – mythic

+0

你的例子不是C.目前還不清楚你正在談論什麼樣的數組/數組。例如,是字符串的逗號部分,還是僞碼數組元素分隔符?更好地提供一個C例子。 – alk

回答

1

您不需要realloc,但您需要兩次malloc。這是在大小10

char * array = malloc (sizeof(char) * 10); 
memcpy (array, data, sizeof(char) * 10); 
char * split_part_1 = array; 
size_t split_part_1_len = 5; 
char * split_part_2 = malloc (sizeof(char) * (10 - 5)); 
memove (split_part_2, array + 5, sizeof(char) * 5); 
size_t split_part_2_len = 5; 

的字符的排列的5位使用陣列的拆分爲例,現在釋放:

free (split_part_1); 
free (split_part_2); 
1

這樣

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

#define separator ", SPLIT, " 

int main(void) { 
    char original[] = "ls, -l, SPLIT, wc, -w"; 
    char part1[sizeof original], part2[sizeof original];//or allocate by malloc 
    char *d = part1, *s = original; 
    char *p = strstr(s, separator); 

    while(s < p){ 
     *d++ = *s++; 
    } 
    *d = 0; 
    strcpy(part2, p + strlen(separator)); 
    printf("[%s] [%s]\n", part1, part2); 
    return 0; 
}