Puntero terminante nulo

Soy completamente novato en C. Estoy tratando de hacer una función simple en C que dividirá la cadena (char array).

El siguiente código no funciona correctamente porque no sé cómo terminar la matriz char en la matriz. Hay punteros de caracteres pasados ​​en función. Una matriz original de caracteres constantes que se dividirá y la otra puntera es una matriz multidimensional que almacenará cada parte dividida en una matriz de caracteres separada.

Haciendo la función que encontré obviamente mucho ajetreo, principalmente debido a mi falta de experiencia con C.

Creo que lo que no puedo lograr en esta función es terminar la matriz individual con ‘\ 0’. Aquí está el código:

void splitNameCode(char *code, char *output); void splitNameCode(char *code, char *output){ int OS = 0; //output string number int loop; size_t s = 1; for (loop = 0; code[loop]; loop++){ if (code[loop] == ':'){ output[OS] = '\0'; // I want to terminate each array in the array OS ++; }else { if (!output[OS]) { strncpy(&output[OS], &code[loop], s); }else { strncat(&output[OS], &code[loop], s); } } } } int main (int argc, const char * argv[]) { char output[3][15]; char str[] = "andy:james:john:amy"; splitNameCode(str, *output); for (int loop = 0; loop<4; loop++) { printf("%s\n", output[loop]); } return 0; } 

Aquí hay un progtwig de trabajo para usted. Déjame saber si necesitas alguna explicación.

 #include  #include  #include  void splitNameCode(char *code, char **output) { int i = 0; char* token = strtok(code, ":"); while (token != NULL) { output[i++] = token; token = strtok(NULL, ":"); } } int main (int argc, const char *argv[]) { char* output[4]; char input[] = "andy:james:john:amy"; splitNameCode(input, output); for (int i = 0; i < 4; i++) { printf("%s\n", output[i]); } return 0; } 

Si entiendo tu intención correctamente, estás intentando tomar una cadena como andy:james:john:amy y llegar a andy\0james\0john\0amy . Si este es el caso, entonces su código puede simplificarse significativamente:

 void splitNameCode(char *code, char *output){ int loop; strncpy(code, output, strlen(code)); for (loop = 0; output[loop]; loop++){ if (output[loop] == ':'){ output[loop] = '\0'; // I want to terminate each array in the array } } }