Buenas tardes, soy nuevo en el foro así que me disculpo por adelantado debido a cualquier error en la redacción de este, y además soy estudiante novato de C++, de modo que lamento mi ignorancia.
El tema es, en concreto estoy realizando un programa cuyo funcionamiento gira en torno a un prompt al cual se le proporcionan instrucciones que el programa reconocerá y en consecuencia ejecutará una determinada función. Utilizo gets para que se le introduzca por teclado la información necesaria, y strtok para dividirla en tokens que puedan ser procesados. Por ejemplo, para realizar una prueba, si le introduzco el comando "prueba" imprimirá: "Prueba 1 completada"; y si se le proporciona "prueba 2" la respuesta será además de la primera, "Prueba 2 completada".
El problema reside en el caso en el que se le introduzca un solo comando reconocido en una función que pide más, crashea...
Este es mi programa:
El caso es, en la función prueba (o mejor dicho, la que en un futuro sería una función) "token[a]=strtok(comando," ")"; divide la cadena "comando" en tokens: y "token[a]=strtok(NULL, " ")" continúa dividiendola por el sitio donde lo dejó el anterior strtok. El problema es que cuando strtok(NULL," ") se ejecuta intentando seguir dividiendo una cadena que no existe (por ejemplo "prueba" la cual empieza y termina de dividirse en el primer strtok) hace que el programa crashee, porque la función prueba para ejecutarse requiere 2 valores: "Prueba" seguido de "2".
Como podría solucionar este problema? Hay algo que me he perdido, hecho mal o usado incorrectamente?
Muchas gracias por vuestra atención.
El tema es, en concreto estoy realizando un programa cuyo funcionamiento gira en torno a un prompt al cual se le proporcionan instrucciones que el programa reconocerá y en consecuencia ejecutará una determinada función. Utilizo gets para que se le introduzca por teclado la información necesaria, y strtok para dividirla en tokens que puedan ser procesados. Por ejemplo, para realizar una prueba, si le introduzco el comando "prueba" imprimirá: "Prueba 1 completada"; y si se le proporciona "prueba 2" la respuesta será además de la primera, "Prueba 2 completada".
El problema reside en el caso en el que se le introduzca un solo comando reconocido en una función que pide más, crashea...
Este es mi programa:
Código [Seleccionar]
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
using namespace std;
int i=1, a=1;
char prompt[256]="[*]:>", comando[256];
string token[12];
int main()
{
while(i==1)
{
a=1;
cout << endl << prompt;
gets(comando);
token[a]=strtok(comando," ");
if(token[a]=="prueba")
{
cout << "prueba 1 completada.\n";
a++;
token[a]=strtok(NULL," ");
if(token[a]=="2"){cout << "prueba 2 completada.\n";}
}
}
}
El caso es, en la función prueba (o mejor dicho, la que en un futuro sería una función) "token[a]=strtok(comando," ")"; divide la cadena "comando" en tokens: y "token[a]=strtok(NULL, " ")" continúa dividiendola por el sitio donde lo dejó el anterior strtok. El problema es que cuando strtok(NULL," ") se ejecuta intentando seguir dividiendo una cadena que no existe (por ejemplo "prueba" la cual empieza y termina de dividirse en el primer strtok) hace que el programa crashee, porque la función prueba para ejecutarse requiere 2 valores: "Prueba" seguido de "2".
Como podría solucionar este problema? Hay algo que me he perdido, hecho mal o usado incorrectamente?
Muchas gracias por vuestra atención.