2016-02-26 3 views
1
#include "stdio.h" 
#include "string.h" 
#include "stdlib.h" 

char *strArray[40]; 

void parsing(char *string){ 
    int i = 0; 
    char *token = strtok(string, " "); 
    while(token != NULL) 
    { 
    strcpy(strArray[i], token); 
    printf("[%s]\n", token); 
    token = strtok(NULL, " "); 
    i++; 
    } 
} 

int main(int argc, char const *argv[]) { 
char *command = "This is my best day ever"; 
parsing(command); //SPLIT WITH " " put them in an array - etc array[0] = This , array[3] = best 

return 0; 
} 

Ici c'est mon code, y a-t-il un moyen simple de le résoudre? D'ailleurs, mon code ne fonctionne pas. Im nouveau au codage langage C et je ne sais pas comment puis-je gérer :(AideC Séparer les chaînes

Répondre

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

char *strArray[40]; 

void parsing(const char *string){//Original does not change 
    int i = 0; 
    strArray[i++] = strdup(string);//make copy to strArray[0] 

    char *token = strtok(*strArray, " "); 
    while(token != NULL && i < 40 - 1){ 
     strArray[i++] = token; 
     //printf("[%s]\n", token); 
     token = strtok(NULL, " "); 
    } 
    strArray[i] = NULL;//Sentinel 

} 

int main(void){ 
    char *command = "This is my best day ever"; 
    parsing(command); 

    int i = 1; 
    while(strArray[i]){ 
     printf("%s\n", strArray[i++]); 
    } 
    free(strArray[0]); 
    return 0; 
} 

int parsing(char *string){//can be changed 
    int i = 0; 

    char *token = strtok(string, " "); 
    while(token != NULL && i < 40){ 
     strArray[i] = malloc(strlen(token)+1);//Ensure a memory for storing 
     strcpy(strArray[i], token); 
     token = strtok(NULL, " "); 
     i++; 
    } 
    return i;//return number of elements 
} 

int main(void){ 
    char command[] = "This is my best day ever"; 
    int n = parsing(command); 

    for(int i = 0; i < n; ++i){ 
     printf("%s\n", strArray[i]); 
     free(strArray[i]); 
    } 
    return 0; 
} 
+0

Merci pour votre intérêt, lorsque je tente d'atteindre la deuxième objet de ce tableau il dit NULL. Par exemple quand je tape printf (% s, strArray [1]), il retourne null. Pourquoi cela arrive? – Berkin

+0

@Berkin Le détail est inconnu. Veuillez indiquer les exemples spécifiques qui peuvent être reproduits. – BLUEPIXY

+0

@Berkin [DEMO pour (2)] (http://ideone.com/WciHB7) – BLUEPIXY

1

strtok() modifier en fait l'argument fourni par conséquent, vous ne pouvez pas passer une chaîne littérale et attendre que cela fonctionne.

Vous devez avoir un l'argument modifiable pour obtenir ce travail si vous les utilisez

Comme par le man page

Soyez prudent lorsque vous utilisez ces fonctions, notez que:..

  • Ces fonctions modifient leur premier argument.

  • Ces fonctions ne peuvent pas être utilisées sur des chaînes constantes.

FWIW, toute tentative pour modifier une chaîne littérale invoque undefined behavior.

0

Je l'ai fait avec votre aide, merci à vous tous :)

Sa Ma bibliothèque divisée = https://goo.gl/27Ex6O

codes ne sont pas dynamiques, si vous entre 100 chiffre d'entrée, il va planter je suppose que

nous pouvons utiliser la bibliothèque avec cet argument:

analyse syntaxique (outputfile, inputfile, splitcharacter)

MERCI