euMesmo2 0 Denunciar post Postado Setembro 30, 2009 #include <iostream> #include <stdlib.h> #include <string> #include <string.h> void func(char str[]) { int nOpcoes; nOpcoes=strspn(str, "|")+1; char* auxiliar; try{ lista=new char*[nOpcoes]; auxiliar=strchr(str, '|'); lista[0]=new char[auxiliar-str]; lista[0]=strtok(str, "|"); for(short a=1; a<=nOpcoes-1; a++) { auxiliar=strchr(auxiliar+1, '|'); lista[a]=new char[auxiliar-str]; lista[a]=strtok(NULL, "|"); } }catch(bad_alloc&) { cout<<"Erro. Impossivel criar menu. Informe suporte."; system("pause"); system("exit"); } } Fiz algumas verificações e o erro ta no parametro "str" para a função strtok. Como posso corrigir? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Outubro 1, 2009 Me diga ql o erro que o compilador acusa?? tipos incompativeis ou algo assim? []s Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 1, 2009 Como você ta chamando isso na função MAIN ? Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Outubro 1, 2009 Me diga ql o erro que o compilador acusa?? tipos incompativeis ou algo assim? []s O compilador nao acusa erro, mas na execução, ele da e aparece aquela janelinha chata para "Enviar relatorio de erros".No debugador do dev ele da "Segmentation error".Como você ta chamando isso na função MAIN ? func("O1|O2|O3");//So pra testar. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Outubro 2, 2009 =// Bom... é o erro acontece msm .. me explique oq você qr fazer que eu tento implementar de outra maneira para a gente tentar! []s Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Outubro 3, 2009 =// Bom... é o erro acontece msm .. me explique oq você qr fazer que eu tento implementar de outra maneira para a gente tentar! []s Bom, essa função, na verdade, e o construtor de uma classe e deveria formar um "vetor de vetores de char" exatamente do tamanho que precisar para a string que receber. Os diferentes vetores sao separados por "|".Eu poderia facilmente criar uma função para substituir strtok, mas o que me deixa bolado e: pq não esta funcionando? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Outubro 3, 2009 De uma olhada em: http://www.cplusplus.com/reference/clibrary/cstring/strtok/ E outra, não use char*, em C++ existe a classe std::string que te facilita a vida! Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Outubro 5, 2009 De uma olhada em: http://www.cplusplus.com/reference/clibrary/cstring/strtok/ Eu ja havia lido isso. O problema e que minha função faz exatamente o que o exemplo faz.E outra, não use char*, em C++ existe a classe std::string que te facilita a vida!Pelo contrario, ja tentei fazer co strings e, alem de não funcionar, eu alocava muita memoria desnecessaria(o q não e um grande problema) e precisava trabalhar com "str.data()" a toda hora para poder usar as funções de "string.h". Na função strtok, inclusive fiz uma gambiarra do tipo:"strtok(&str[0], "|")" Onde str e uma string, pode testar q funciona. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Outubro 6, 2009 De uma olhada em: http://www.cplusplus.com/reference/clibrary/cstring/strtok/ Eu ja havia lido isso. O problema e que minha função faz exatamente o que o exemplo faz. Problema?Se a função do exemplo faz o mesmo que você quer, então não há necessidade de fazer mais nada! E outra, não use char*, em C++ existe a classe std::string que te facilita a vida! Pelo contrario, ja tentei fazer co strings e, alem de não funcionar, eu alocava muita memoria desnecessaria(o q não e um grande problema) e precisava trabalhar com "str.data()" a toda hora para poder usar as funções de "string.h". Na função strtok, inclusive fiz uma gambiarra do tipo:"strtok(&str[0], "|")" Onde str e uma string, pode testar q funciona. Me diga, pra que você quer as funções de <cstring> quando você tem std::string na mão?Use-as apenas quando estritamente necessário. E, pra usar essa sua gambiarra, faça: "strtok(str.c_str(), "|");". std::string::c_str() retorna o const char* da string. Para separar uma string em tokens: void Tokenize(const std::string &str, char tkn) { int i=-1; int j=-1; while ((i = str.find(tkn, i+1)) != std::string::npos) { std::cout << "tkn: " << str.substr(j+1, i-j-1) << std::endl; j = i; } std::cout << "last tkn: " << str.substr(j+1) << std::endl; } Não tem segredo, é seguro, não vai dar segfault... Cara, não tenha medo de usar os recursos que a linguagem de programação te oferece. (Apenas planeje bem o seu sistema...) Se é um recurso "built-in" da linguagem, pode ter certeza que está otimizado até o último fio de cabelo. Obviamente, programas escritos em linguagens de baixo nível NORMALMENTE tem um desempenho melhor. Mas os compiladores hoje em dia dão conta do recado. Se realmente quiser desemepenho, vá de Assembly! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites