2016-12-05 3 views
0

Ich habe mich umgeschaut, aber es gibt viele verschiedene Antworten und C ist verwirrend, also frage ich lieber nach meiner speziellen Frage.Wie teilt man ein Array in zwei Teile auf (von Start bis x und von x bis Ende) in C?

Also lassen Sie uns sagen, ich habe ein Array wie folgt aus:

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

Deshalb möchte ich so dieses Array in zwei verschiedene (char) Arrays aufgeteilt:

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

I Verwenden Sie realloc und malloc?

+0

Wollen Sie Eines der Arrays als das ursprüngliche Array? Dann beides. Andernfalls, wenn Sie das ursprüngliche Array in seinem ursprünglichen Zustand beibehalten möchten, müssen Sie zwei neue Arrays zuweisen, und dafür können Sie eine der beiden Funktionen verwenden. –

+0

@Someprogrammerdude Ich möchte das ursprüngliche Array behalten, ja. – mythic

+0

Ihr Beispiel ist nicht C. Es ist nicht klar, über welche Art von Array/Arrays Sie sprechen. Zum Beispiel, sind diese Komma Teile der Strings, oder sind sie Pseudo-Code-Array-Element Trennzeichen? Stellen Sie besser ein C-Beispiel bereit. – alk

Antwort

1

Sie nicht zu realloc, aber Sie müssen malloc zweimal. Dies ist ein exemple Spaltung in Position 5 einer Reihe von Zeichen der Größe 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; 

die Arrays verwenden, jetzt zu befreien:

free (split_part_1); 
free (split_part_2); 
1

wie diese

#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; 
} 
Verwandte Themen