"Quebrar" char* C [RESOLVIDO]

1. "Quebrar" char* C [RESOLVIDO]

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 08/10/2010 - 13:32h

Olá!

Já tenho experiência em C/C++, porém não consigo me dar bem com a biblioteca string.h.

Tenho que fazer um método que procure a primeira ocorrência de uma virgula em um char* e jogue para outro char* tudo que vier antes dessa virgula. Algo do tipo:
"abc,def" -----> "abc"

Abaixo segue o código que fiz, porém esta gerando segfault e não consigo ver nenhum acesso irregular de memória.
( Algumas variaveis são declaradas mas não são usadas ainda, porém serão usadas no futuro )


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

void parseCommand( char* line ){
char* pos_i;
char* pos_f;

char* aux;

pos_f = strtok( line, "," );

if( pos_f != NULL ){
strncpy( aux, line, pos_f - line + 1 );
printf( "%s\n", aux );
}
else{
printf( "NULL pointer!\n" );
}
}

int main(){
char* test = "abcde,fgh";
parseCommand( test );

return 0;
}

Em C++ não há problemas, consigo escrever o método sem problemas, mas em C não estou conseguindo.

Agradeço a qualquer ajuda/palpite/dica que for enviada.

PS: O código deve ser escrito em C, utilizando a biblioteca string.h. C++ não é permitido :(


  


2. Re: "Quebrar" char* C [RESOLVIDO]

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 08/10/2010 - 14:19h

Ola!

Primeiramente, obrigado pela resposta!

Fiz a alteração sugerida, porém o segfault segue. Debuguei o codigo com printf's e descobri que o segfault é gerado na linha do strtok, porém a sintaxe parece estar correta. Segue abaixo as alterações:

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

void parseCommand( char* line ){
char* pos_i;
char* pos_f = strtok( line, "," );

if( pos_f != NULL ){
char aux[ sizeof( pos_f ) ];
strncpy( aux, line, sizeof( pos_f ) );
printf( "%s\n", aux );
}
else{
printf( "NULL pointer!\n" );
}
}

int main(){
char* test = "abcde,fgh";
parseCommand( test );

return 0;
}



3. Re: "Quebrar" char* C [RESOLVIDO]

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 08/10/2010 - 14:25h

Desculpe! Esqueci de fazer a última alteração sugerida pelo Sam. Agora o código executa, porém aux guarda um lixo no final do seu conteúdo. Vou verificar alguma variavel nao inicializada e posto a solução o mais breve possivel. Abaixo segue o codigo "executavel":

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

void parseCommand( char* line ){
char* pos_i;
char* pos_f = strtok( line, "," );

if( pos_f != NULL ){
char aux[ sizeof( pos_f ) ] = "{TTEXTO}";
strncpy( aux, line, sizeof( pos_f ) );
printf( "%s\n", aux );
}
else{
printf( "NULL pointer!\n" );
}
}

int main(){
char test[] = "abcde,fgh{TTEXTO}";
parseCommand( test );

return 0;
}


4. Re: "Quebrar" char* C [RESOLVIDO]

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 08/10/2010 - 14:43h

Pronto! Agora esta funcionando! \o/

Fica o meu agradecimento ao Sam!!!

Caso alguem encontre alguma otimizacao (ou mesmo gambiarra :) ), por favor sinta-se a vontade para postá-la. Meu objetivo não é só fazer o código funcionar, mas sim construí-lo da maneira correta!

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

void parseCommand( char* line ){
char* pos_i;
char* pos_f = strtok( line, "," );

if( pos_f != NULL ){
char aux[ strlen( pos_f ) + 1 ];
strncpy( aux, pos_f, strlen( pos_f ) + 1 );
char* aux2 = aux;
printf( "%s\n", aux );
}
else{
printf( "NULL pointer!\n" );
}
}

int main(){
char test[] = "abcde,fgh\{TTEXTO}";
parseCommand( test );

return 0;
}






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts