String Array als Referenzparameter

user2580

Grünschnabel
Hallo ich habe ein Problem mit der Übergabe eines Stringarrays unter C:

Ich möchte an die Funktion split eine Zeichenkette übergeben, diese Splitten lassen und in ein Array so abspeichern, das ich danach Zugriff darauf habe.

Ich hoffe das war halbwegs verständlich.

Hier der Quellcode:
Code:
#define MAX_ENTRY 500
#define MAX_COMMANDS 10
#define MAX_PARAM 19
#define END_OF_COMMAND ";"
#define END_OF_PARAM " "

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


int split(char **tokens, char *entry, char *delemiter){
  
 printf("blub");
  char *token = NULL;	
  int current_token = 0;
  
  token = strtok(entry,delemiter);

  if(token != NULL){

   *tokens[current_token] = (char *)malloc(strlen(token)* sizeof(char));
  
   strcpy(*tokens[current_token],token);
   current_token++;    
    
    while ( (token = strtok(NULL, delemiter)) ){
     *tokens[current_token] = (char *)malloc(strlen(token)* sizeof(char));
     strcpy(*tokens[current_token],token);
     current_token++;
    }
   }
 return current_token;
}

int main( int argc, const char** argv){

 char entry[MAX_ENTRY];
 char *commands[MAX_COMMANDS];
 
 int iCommands = 0;
 int i;
 while(1){

  printf(">");fgets(entry,MAX_ENTRY,stdin);

  printf("Eingabe:%s",entry);
  iCommands = split(&commands,entry,END_OF_COMMAND);
  
  for(i = 0; i < iCommands; i++){
     printf("command[%i]:%s\n",i,commands[i]);
    }  
 
 }
 

}

Schonmal vorab vielen Dank an ALLE
 
Hi.

Man kann von einer Array-Variablen nicht die Adresse bestimmen:
C:
array == &array == &array[0]
Deshalb verwendet man den Adressoperator mit Arrays üblicherweise auch nicht:
C:
iCommands = split(commands,entry,END_OF_COMMAND);
Du darfst in der Funktion nicht Dereferenzieren. "tokens" ist ein Array von "char*"!
C:
tokens[current_token] = (char *)malloc(strlen(token)* sizeof(char));

Gruß
 
Danke für den Tipp.
nur wie löse ich jetzt das Problem.

Kann ich dafür eine struct nehmen?.

also ungefähr so:
Code:
 struct commands{
 char *commands[10];
};

commands myCommands;
split(&myCommands);
 
Zurück