Bonjours a tous,
voila j´ai un petit probleme avec les chaines de caractere en C/C++ et je pense pouvoir trouver l´aide necessaire ici...
bon voila en fait, c´est pour un genre de chat... alors en fait je recupere le pseudo d´un mec que je stocke dans un tableau et je voudrais rajouté au pseudo ceci: " < < " , et ensuite a la chaine que je viens de faire je voudrais rajouté le message entré par l´utilisateur, qui lui aussi est stocké dans un tableau, seulement ke ne sais pas comment faire... j´ai essayé avec strcat(), j´arrive pour faire le premier mix, mais pour le deuxieme, cela ne marche pas, serait ce parce que la fonction strcat() ne prend pas de pointeur en argument? je ne sais pas, enfin si vous pouviez m´aider s´il vous plait...
Merci par avance...
Bob...
ben strcat convient normalement parfaitement a cela
par contre, n´oublie pas que la chaine destination de strcat doit etre dynamique.
donc pas déclarée :
char a[500];
mais :
char *a = new char[500];
" par contre, n´oublie pas que la chaine destination de strcat doit etre dynamique"
mu ? moi je vois pas trop la nuance :-?
dans la MSDN :
/ * STRCPY.C: This program uses strcpy
* and strcat to build a phrase.
*/
void main( void )
{
char string[80];
strcpy( string, " Hello world from " ) ;
strcat( string, " strcpy " ) ;
strcat( string, " and " ) ;
strcat( string, " strcat!" ) ;
printf( " String = %s\n", string ) ;
}
arf ! ça marche ? il me semblait que non... peut etre trompé...
par contre, il me semble que ceci ne marcherait pas :
char string[80]={"hello"};
strcat(string,"arf");
a essayer...
bah desoler pour ce message en fait j´ai du faire une erreur en ecrivant le code que je n´avais pas remarqué par ce que je viens de refaire le code qu´il me semblait avoir entré, mais la ca marche bien... bon tant pis desoler pour le derangement...
juste pour info moi j´avais fait mon code de base sans que mes pointeurs sont dynamique...
et j´ai réécris mon code sans que les pointeurs soit dynamique... tout ca pour dire que mon code marche sans que mes pointeurs soit dynamique ! !!
juste encore deux petites questions:
-> alors la premiere est franchement bete, voila en fait je n´utilise pas souvent les pointeurs, et je sais m´en servir mais pas a la perfection, je n´ai jamais besoin de les reutilisé, c´est pour ca que je ne sais pas comment réinitiailisé un pointeur ( le remettre a 0 en fait)
-> deuxieme point lorsque j´envoie au client de mon application, ou que mon client en voit un message au serveur, j´ai un petit probleme... pourtant voila comme je fait pour envoyé le message:
send(csock_chat_server, message, sizeof(message), 0);
ou " message" est le pointeur qui contient la chaine de caractere contenant le pseudo et le message ajouté ! !!
autre chose il n´y a que la machine de destination qui ne recoit pas bien le message... parce que quand j´affiche le contenue du pointeur message dans une textbox, le message est normal ! !!
" je ne sais pas comment réinitiailisé un pointeur"
pas besoin de les réinitialiser, au mieux ça les fera pointer vers une autre zone mémoire ; par contre il faut penser à faire des free ( si tu fais des malloc) ou des ::operator delete ( si tu fais des ::operator new) pour bien libérer la mémoire que tu utilises lorsque tu n´en as plus besoin
autant te montrer par un exemple ce qu´il se passe dans mon programme:
l´utilisateur rentre: " salut"
le programme envoie: " pseudo < < salut"
on continue la conversation
l´utilisateur rentre: " comment vas-tu"
le programme envoie: " pseudo < < salutcomment vas-tu"
voila tu vois ce que ca me fait, le code en question est:
case IDC_SEND:
GetDlgItemText(hWnd, IDC_MESS, send_mess, 2048); / / recup mess
message = strcat(pseudo, send_mess); / / message avec pseudo
SendMessage(GetDlgItem(hWnd, IDC_TCHAT), LB_ADDSTRING, NULL, ( LPARAM)(LPCSTR) message);
et ensuite tu ne sais pas pourquoi on ne recoit pas le message normalement, sur la machine distante?
Avec ce que tu fais actuellement tu envoies l´adresse de ta chaine de caractere au client. Il faut envoyer les caracteres.
send(...,&,strlen(message))
perso ça fait trop longtemps que j´ai pas touché à du réseau :/ pour ne pas raconter d´âneries, mieux vaut attendre que qqun de compétent dans le domaine puisse t´éclairer ; JY² a l´air bien au fait de la chose en tout cas.
tiens, salut i_am_the_law ; )
au passage, c´est fou comme lorsque les questions sont bien formulées et précises, les réponses arrivent en moins de qq minutes :D
alors j´ai une erreur en mettant ce code:
l´erreur:
error C2664: ´send´ : impossible de convertir le paramètre 2 de ´char **__w64 ´ en ´const char *´
Les types pointés n´ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
LVG < < ok pour le réseau, pour pour le fait que le pointeur " ajoute", la chaine de caractere?
ben tu dois faire des strcat en chaine sur ton buffer de destination, donc ça concatène avec tout ce qui existe avant, et ça grossit, ça grossit, . ..
strcat se base sur la présence d´un \0 pour déterminer la fin des chaines : utilies par ex. un char buffer[MAX_MSG_LENGTH] dans lequel tu colles pseudo < < msh à chaque fois ; tu peux utiliser un sprintf pour ça
ex : tu as un char *pseudo, un char *msg, tu fais un petit :
char buffer[MAX_MSG_LENGTH];
sprintf(buffer, " %s < < %s\n", pseudo, msg);
et là dans buffer tu dois avoir ce qu´il faut ![]()
ce qu´il y a, c´est qu´avec ta version le texte contenu par " pseudo" EST modifié par le strcat
ok, je vais regarder de ce coté... merci a vous tous pour votre aide!!!
Je suis desole pour mon msg precedent j´ai fait une grosse erreur. J´avais en tete des fct que j´avais faites ou j´avais eu un pb d´envoie de pointeur au lieu des donnees. Le pire c´est que ce que je t´ai dit de faire aurait justement cree ce pb. Ca devait etre la fatigue
Toi tu envoyais bien ta chaine mais pas le bon nombre d´octets.
Bref pour ton envoie, il faut faire send(....,message,strlen(message))
L´erreur venait du sizeof qui renvoit 4 sur un pointeur. Pour la taille d´une chaine c´est strlen.
j´utilise sprintf pour mon envoie de donné... or quand j´affiche sur le dialog le message envoyé pas de probleme... seulement quand je l´envoie a la machine distante, j´ai tout une serie de IIII qui apparaise avec le message, je crois que c´est a cause de l´utilise de sprintf(), comment palier a se probleme?
voici le code en question:
sprintf(message, " %s < < %s", pseudo, send_mess); / / chaine a affiché
send(csock_chat_server, message, sizeof(message), 0);
alors personne ne peut m´aider?
Je ne connais rien à l´envois de donné comme cela, cependant, j´ai un petit doute sur sizeof(message), ne serais pas plutôt strlen(message)*size(char) ? Je dis ca sans connaitre cette fonction.