strstr donne un pointeur, mais j'aimerai un(e) string =)

strstr donne un pointeur, mais j'aimerai un(e) string =) - C++ - Programmation

Marsh Posté le 15-03-2003 à 23:30:16    

Salut,
 
Je suis newbie en C :)
Voila mon probleme :
 

Code :
  1. char *password;
  2. password = strstr(strstr(buffer,"oldpassword" ),"value" );


 
password est donc un pointeur vers un buffer qui m'interesse  :whistle:  
 
J'aimerai savoir comment avoir le reste du buffer pointé par "password", parceque j'ai une fonction (voir en dessous) qui necessite un buffer en entrée et non un pointeur vers un buffer.
 

Code :
  1. char *mid(char *buffer, unsigned int i, unsigned int size)
  2. {
  3.     unsigned int j;
  4.     char *temp;
  5.     for (j=i; j<(i+size); j++) {
  6.         temp[j-i] = buffer[j];
  7.                 if (j>strlen(buffer)) break;
  8.     }
  9.     temp[size]='\0';
  10.     return temp;
  11. }


 
et en gros j'aimerai faire ca :

Code :
  1. char retour;
  2. retour = mid(password,0,5);


 
Mais comme password est un pointeur ca marche pas logique, alors j'ai essayé *password mais marche pas non plus..  :sarcastic:  
 
Merci pour votre aide  :pt1cable:


Message édité par Phlos le 15-03-2003 à 23:45:25
Reply

Marsh Posté le 15-03-2003 à 23:30:16   

Reply

Marsh Posté le 15-03-2003 à 23:52:56    

Essaye ça
 

Code :
  1. char* retour;
  2.   retour = mid(password,0,5);


 
(et achète toi un bon bouquin, car tu mélanges tout :) )


Message édité par leneuf22 le 15-03-2003 à 23:54:50
Reply

Marsh Posté le 15-03-2003 à 23:53:45    

bah  

Code :
  1. char *retour;
  2.   retour = mid(password,0,5);

Reply

Marsh Posté le 16-03-2003 à 00:04:25    

Merci  :jap:  
 
Mais ca marche pas mieux, aucune erreur de compilateur mais le programme plante sur retour = mid(password,0,5);
 
 [:sisicaivrai]
 
EDIT : C'est dans la fonction mid plus exactement que ca plante, sur la ligne "temp[j-i] = buffer[j];"  :p
 
EDIT 2 : j'ai oublié de preciser que j'ai supprimé cette ligne dans la fonction "mid" : "temp = new char[sizeof(char)*size+1];"
parceque c'est du C++ et je sais pas le traduire en C  :lol:  
L'erreur doit venir de la  :sarcastic:


Message édité par Phlos le 16-03-2003 à 00:15:26
Reply

Marsh Posté le 16-03-2003 à 00:12:22    

[:phlos]  
 
 :hello:

Reply

Marsh Posté le 16-03-2003 à 01:14:52    

temp = malloc(...)et free(temp)


Message édité par VisualC++ le 16-03-2003 à 01:15:06
Reply

Marsh Posté le 16-03-2003 à 09:45:55    

VisualC++ a écrit :

temp = malloc(...)et free(temp)


 
Merci mais en fait j'ai rajouté un buffer dans la fonction "mid" (maintenant ca a 4 arguments)  :ange:  
 
 
 :hello:

Reply

Marsh Posté le 16-03-2003 à 12:18:25    

sauf que je repond a ta question comment ecrire

Code :
  1. temp = new char[sizeof(char)*size+1];

en C

Reply

Marsh Posté le 16-03-2003 à 13:05:23    

VisualC++ a écrit :

sauf que je repond a ta question comment ecrire

Code :
  1. temp = new char[sizeof(char)*size+1];

en C


 
Mais si je fais un malloc() au début de la fonction "mid" et que je fais un free() a la fin, si je renvoie un pointeur vers ce buffer, ca va pas trop marcher ?  :??:

Reply

Marsh Posté le 16-03-2003 à 19:06:34    

Il faut faire free() quand tu n'as plus besoin de la mémoire allouée, et pas avant.

Reply

Marsh Posté le 16-03-2003 à 19:06:34   

Reply

Marsh Posté le 17-03-2003 à 00:12:26    

c pas un peu lourd tout ca ?
 
unsigned int j;
char temp[size];
 
un brin plus simple quand meme, nan

Reply

Marsh Posté le 17-03-2003 à 08:02:16    

Deaddy a écrit :


char temp[size];


c'est plus simple, mais possible que si la valeur de size est connue à la compilation (donc si c'est une constante)

Reply

Marsh Posté le 17-03-2003 à 08:48:19    

Deaddy a écrit :

c pas un peu lourd tout ca ?
 
unsigned int j;
char temp[size];
 
un brin plus simple quand meme, nan


 
Et s'il fait ça à l'intérieur de sa fonction "mid", l'espace mémoire alloué sera détruit à la fin de la fonction. Donc inutilisable après.

Reply

Marsh Posté le 17-03-2003 à 15:10:27    

gloop, j'ai testé et ca marche , alors que size n'est connu qu'à l'exec
 
ensuite détruire ce qui a été alloué en fin de fonction me parait plutot pertinent
si vraiment c génant, suffit de mettre un static devant, je pense

Reply

Marsh Posté le 08-12-2006 à 21:05:06    

gloop a écrit :

c'est plus simple, mais possible que si la valeur de size est connue à la compilation (donc si c'est une constante)


C'est faux vu que le tableau de char est alloué dynamiquement dans la stack et "free" à la sortie de la fonction :)

Reply

Marsh Posté le 08-12-2006 à 21:19:17    

Deaddy a écrit :

gloop, j'ai testé et ca marche , alors que size n'est connu qu'à l'exec


C'est une extension C99; Les Variable Length Array (VLA).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed