Strcat ne marche pas avec C++

Fermé
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - 2 déc. 2011 à 11:27
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 2 déc. 2011 à 13:47
Bonjour,

j'ai un soucis avec strcat je ne sais pas pourquoi elle ne marche pas
je suis sous linux je travaille avec eclipse eclipse
voici mon programme

#include<iostream>
#include"chaine.h";
#include <cstring>
#include <string.h>
#include <stdio.h>
using namespace std;

int main()
{
/
char *s1 = new char[20];
char *s2 = new char[20];

s1="koukou";
s2="toto";
strcat(s1,s2);

cout<<"la chaine est:"<<s1<<endl;


return 0;
}

et il m'affiche rien

merci d'avance

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 2/12/2011 à 12:59
Bonjour,

Première erreur :
#include"chaine.h"; -> pas de ; après un include
De plus mélanger cstring avec string.h c'est pas top.
Pourquoi ne pas plutôt utiliser string et l'opérateur + ?
Et enfin, n'oublie pas de mettre des delete.

Google is your friend
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 2/12/2011 à 13:38
Salut.
C'est normale que ça ne fonctionne pas, tu fais n'importe quoi.
int main() 
{ 

char *s1 = new char[20]; 
char *s2 = new char[20]; 
là, tu viens de définir 2 pointeurs (s1 et s2) sur char. Il pointent chacun sur un nouveau tableau de char de taille 20 

s1="koukou"; 
s2="toto"; 
là tu fais pointé s1 sur la chaine de caractères constants "coucou" et s2 sur "toto". 
Déjà, tu viens de perdre les deux tableaux que tu as créé avant, car ils ne sont plus référencés. Et maintenant tes pointeurs référencent des "const char"
strcat(s1,s2); 
Là, gros problème, tu essais d'écrire dans une chaine de taille 7 des trucs en plus. Et en plus il s'agit de const char ! Un tel code est susceptible de générer une erreur de segmentation. 

cout<<"la chaine est:"<<s1<<endl; 


return 0; 
} 

La bonne façon de mettre une chaine de caractères dans une chaine de caractère est d'utiliser strcpy(). Donc ici remplace s1="koukou"; par strcpy(s1,"koukou");.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
2 déc. 2011 à 13:45
Arf, j'ai même pas vu qu'il perdait les zones allouées. Heureusement que t'es là :-))).
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 déc. 2011 à 13:47
comme le fait remarqué fiddy, si tu fait du C++, autant tout faire avec string, c'est plus simple.
string s1("koukou");
string s2("toto");
s1+=s2;
0