title: Split String into String array
body: <p>I have been playing around with programming for arduino but today i've come across a problem that i can't solve with my very limited C knowledge.
  Here's how it goes.
  I'm creating a pc application that sends serial input to the arduino (deviceID, command, commandparameters). This arduino will transmit that command over RF to other arduino's.  depending on the deviceID the correct arduino will perform the command.</p>
  <p>To be able to determine the deviceID i want to split that string on the &quot;,&quot;.
  this is my problem, i know how to do this easily in java (even by not using the standard split function), however in C it's a totally different story.</p>
  <p>Can any of you guys tell me how to get this working?</p>
  <p>thanks</p>
  <pre><code>/*
    Serial Event example
  
   When new serial data arrives, this sketch adds it to a String.
   When a newline is received, the loop prints the string and 
   clears it.
  
   A good test for this is to try it with a GPS receiver 
   that sends out NMEA 0183 sentences. 
  
   Created 9 May 2011
   by Tom Igoe
  
   This example code is in the public domain.
  
   http://www.arduino.cc/en/Tutorial/SerialEvent
  
   */
  
  String inputString;         // a string to hold incoming data
  boolean stringComplete = false;  // whether the string is complete
  String[] receivedData;
  
  void setup() {
      // initialize serial:
      Serial.begin(9600);
      // reserve 200 bytes for the inputString:
      inputString.reserve(200);
  }
  
  void loop() {
      // print the string when a newline arrives:
      if (stringComplete) {
          Serial.println(inputString); 
          // clear the string:
          inputString = &quot;&quot;;
          stringComplete = false;
      }
  }
  
  /*
    SerialEvent occurs whenever a new data comes in the
   hardware serial RX.  This routine is run between each
   time loop() runs, so using delay inside loop can delay
   response.  Multiple bytes of data may be available.
   */
  void serialEvent() {
      while (Serial.available()) {
          // get the new byte:
          char inChar = (char)Serial.read(); 
          if (inChar == '\n') {
              stringComplete = true;
          } 
          // add it to the inputString:
          if(stringComplete == false) {
              inputString += inChar;
          }
          // if the incoming character is a newline, set a flag
          // so the main loop can do something about it:
      }
  }
  
  String[] splitCommand(String text, char splitChar) {
      int splitCount = countSplitCharacters(text, splitChar);
      String returnValue[splitCount];
      int index = -1;
      int index2;
  
      for(int i = 0; i &lt; splitCount - 1; i++) {
          index = text.indexOf(splitChar, index + 1);
          index2 = text.indexOf(splitChar, index + 1);
  
          if(index2 &lt; 0) index2 = text.length() - 1;
          returnValue[i] = text.substring(index, index2);
      }
  
      return returnValue;
  }
  
  int countSplitCharacters(String text, char splitChar) {
      int returnValue = 0;
      int index = -1;
  
      while (index &gt; -1) {
          index = text.indexOf(splitChar, index + 1);
  
          if(index &gt; -1) returnValue+=1;
      }
  
      return returnValue;
  } 
  </code></pre>
  <hr />
  <p>I have decided I'm going to use the <code>strtok</code> function.
  I'm running into another problem now. The error happened is</p>
  <blockquote>
  <p>SerialEvent.cpp: In function 'void splitCommand(String, char)':</p>
  <p>SerialEvent:68: error: cannot convert 'String' to 'char*' for argument '1' to 'char* strtok(char*, const char*)'</p>
  <p>SerialEvent:68: error: 'null' was not declared in this scope</p>
  </blockquote>
  <p>Code is like,</p>
  <pre><code>String inputString;         // a string to hold incoming data
  
  void splitCommand(String text, char splitChar) {
      String temp;
      int index = -1;
      int index2;
  
      for(temp = strtok(text, splitChar); temp; temp = strtok(null, splitChar)) {
          Serial.println(temp);
      }
  
      for(int i = 0; i &lt; 3; i++) {
          Serial.println(command[i]);
      }
  }
  </code></pre>