strcat

strcat - C++ - Programmation

Marsh Posté le 28-03-2012 à 11:08:45    

bonjour,
je cherche à faire deux strcat consécutifs, mais j'ai un petit problème
 
file = "/mnt/disque/audio"
 
void fonction (char *file)
{
    char *file1;
    char *file2;
 
    file1 = file;
    file2 = file;
    strcat(file1, "ch1.wav" );
    strcat(file2, "ch2.wav" );
    printf("%s\n", file1);
    printf("%s\n", file2);
}
 
et j'obtient :  
    /mnt/disque/audio_ch1.wav
    /mnt/disque/audio_ch1.wav_ch2.wav

Reply

Marsh Posté le 28-03-2012 à 11:08:45   

Reply

Marsh Posté le 28-03-2012 à 11:15:31    

Et vous avez même du pot que ça plante pas direct!
Vu que file = "/mnt/disque/audio" il est ou l'espace alloué pour les caractères que vous rajoutez à file avec strcat?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 28-03-2012 à 11:57:47    

avant il y a  
    char file[100]

Reply

Marsh Posté le 28-03-2012 à 12:21:19    

Tu cherche a obtenir quoi d'abord comme résultat?
 /mnt/disque/audio_ch1.wav
 /mnt/disque/audio_ch2.wav
 
Tu obtiens ça  
  /mnt/disque/audio_ch1.wav  
    /mnt/disque/audio_ch1.wav_ch2.wav
 
car ton file1 et ton file2 sont des pointeurs sur ton file, du coup que tu modifie file1 ou file2 au final tu modifie file !

Reply

Marsh Posté le 28-03-2012 à 12:21:21    

Code :
  1. file1 = (char*)malloc(strlen(file)+7);
  2. file2 = (char*)malloc(strlen(file)+7);
  3. strcpy(file1,file);
  4. strcpy(file2,file);
  5. strcat(file1,"ch1.wav" );
  6. strcat(file2,"ch2.wav" );
 

Parce que là, tu fais pointer file1 sur ta chaîne file, donc ton strcat ajoutera directement à la fin de file "ch1.wav", ensuite "ch2.wav" (vu que ch2 pointe aussi sur ta chaîne file)

 

edit : Rah, grillé de 3secs :o


Message édité par Terminapor le 28-03-2012 à 12:21:42

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 28-03-2012 à 14:01:48    

j'ai essayé avec les malloc, mais le résultat est toujours le meme

Reply

Marsh Posté le 28-03-2012 à 15:25:50    

Donc fais voir tout ton code, et pas seulement un bout insuffisant qui ne permet pas de diagnostiquer le pb.  
Parce que ce qu'a posté Terminapor est un code 100% correct.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-03-2012 à 09:39:02    

j'ai rien dis, ça marche
merci

Reply

Marsh Posté le 29-03-2012 à 12:11:16    

par contre j'ai un problème d'allocation mémoire :
 
*** glibc detected *** munmap_chunk(): invalid pointer: 0x087110f0 ***

Reply

Marsh Posté le 29-03-2012 à 12:13:20    

C'est sur que sans poster ton code, grâce a nos boules de cristal suractivées, on va tout de suite en deviner la cause :sarcastic:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-03-2012 à 12:13:20   

Reply

Marsh Posté le 29-03-2012 à 12:26:27    

moi je veux bien, mais il fait 200000 lignes :)
j'ai posté l'eesentiel

Reply

Marsh Posté le 29-03-2012 à 12:29:31    

Non attends, l'adresse 0x087110F0 c'est un début de tableau de structure, celle-ci qui contient un int comme référence, un std::string pour un nom et et... ah, un pointeur pour l'élément suivant.

 

:o

 

Sinon, sérieusement,  t'as bien fait attention à initialiser tout tes pointeurs à NULL (0) ? Fais-le si tu l'a fait, comme ça s'il te dit adresse invalid at 0, c'est que t'accède à un pointeur non-initialisé. Sinon, ptet un free() mal placé, faut toujours pensé que un pointeur qui pointe sur rien -> on le met à 0

 

Après on peut pas dire sans voir ton code :D


Message édité par Terminapor le 29-03-2012 à 12:31:02

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 29-03-2012 à 12:32:47    

lebron54 a écrit :

j'ai posté l'eesentiel

Non, parce que typiquement, c'est un message causé par une libération mémoire mal faite, et sans le code, comment veux tu qu'on sache comment c'est mal libéré et ou...
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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