begin process at 2010 03 22 05:33:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Pb avec strcpy et win32


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb avec strcpy et win32

mardi 4 mai 2004 à 17:56:55 | Pb avec strcpy et win32

ToToL

Membre Club
Bonjours je me suis mis depuis peut a la programation win32 et j'aurai besion de copier une chaine de caractere dans une variable ( char * text; ) mais si j'utilise strcpy j'ai un bugg windows qui me dit que la fonction a écrit en dehors de la memoire. j'ai chercher un peut sur le net et j'ai trouver une fonction équivalente pour le win32 et celle ci est lstrcpy malheuresement j'ai tjr le meme probleme.

Est ce que vous auriez une solution mis a par recréé la fonction moi meme ?

++

Thomas
mardi 4 mai 2004 à 18:03:36 | Re : Pb avec strcpy et win32

petitchech


salut
sa doi etre peu etre que la taille de la chaine de text est plus grande que la capacité de la variable.
mardi 4 mai 2004 à 18:13:42 | Re : Pb avec strcpy et win32

hilairenicolas


oui , ou bien que char * text n'est pas alloué
montre ton code
mardi 4 mai 2004 à 18:19:12 | Re : Pb avec strcpy et win32

ToToL

Membre Club


#include <windows.h>
#include <stdlib.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

#define NOM_APPLICATION "Premiere Application"

HINSTANCE hinst;
char text1[38]="C'est chaux le Win32. Mais j'y arrive";
char text2[6]=": - )";
int a=30;

int WINAPI WinMain (HINSTANCE hInstance, //numero definissant notre programme
HINSTANCE hPrevInstance, //plus utilisé (à NULL°
PSTR szCmdLine, //ligne de commande avec l'appel du programme
int iCmdShow) //état du programme au démarrage

{
//variable devant contenir un numero identifiant la fenetre que nous allons creer
HWND hwnd ;
//structure contenant les données d'un message
MSG msg ;
//classe de fenetre
WNDCLASS wndclass ;
//Instance du programme
hinst = hInstance;

wndclass.style = CS_HREDRAW | CS_VREDRAW ; //demande à Windows de rafraichir la fenetre si sa largeur ou sa hauteur changent
wndclass.lpfnWndProc = WndProc ; //donne l'adresse de la procédure de fenêtre
wndclass.cbClsExtra = 0 ; //permet de reserver de l'espace mémoire interne...
wndclass.cbWndExtra = 0 ; //...a windows pour notre appli (non neccessaire)
wndclass.hInstance = hinst ; //a quel programme est destiné cette fenêtre (le notre)
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//definit l'icône de notre programme (icône par defaut)...
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //...le curseur (par defaut)
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//...la couleur de fond (ici GRAY_BRUSH, mais il y'en a d'autres (WHITE_BRUSH, BLACK_BRUSH..)
wndclass.lpszMenuName = NULL ; //permet de donner le nom d'une ressource menu (nous verrons cela plus tard)
wndclass.lpszClassName = NOM_APPLICATION ; //nom que nous attribuons a la classe de fenêtre

//créer la classe de fenêtre et la sauvegarder sous ce nom

RegisterClass (&wndclass);

//creer la fenêtre a partir de notre classe de fenêtre

hwnd = CreateWindow (NOM_APPLICATION, // nom de la classe de fenêtre pour créer notre fenêtre
"Mon premiere programme Win32 !", // titre de la fenêtre
WS_OVERLAPPEDWINDOW, // style de la fenêtre (ici superposable)
CW_USEDEFAULT, // position initiale coin superieur gauche en X
CW_USEDEFAULT, // position initiale coin superieur gauche en y
320, // largeur de départ
240, // hauteur de départ
NULL, // pas de fenêtre parente
NULL, // pas de menu
hinst, // a quel programme est relié notre fenêtre
NULL) ; // données de création

//afficher la fenêtre

ShowWindow (hwnd, iCmdShow);

//mettre son contenu à jour

UpdateWindow (hwnd) ;

while (GetMessage (&msg,NULL,0,0))

{
//traduire les données du message pour qu'elles soient lisible
TranslateMessage (&msg) ;
//envoyer le message à Windows qui le transmettra à WINDOWPROC
DispatchMessage (&msg) ;
}

return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

//handle sur un device context
HDC hdc ;
//structure de dessin
PAINTSTRUCT ps ;
//structure contenant les coordonnées et la taille d'un rectangle
RECT rect ;
//créé la variable qui contiendra le pinceau
HBRUSH pinceau;

switch (message)

{

case WM_KEYUP:
if ( wParam == VK_F1 ) { MessageBox(hwnd,"F1","a",MB_OK);}
return 0;
//s'il faut redessiner le contenu de la fenetre
case WM_PAINT:
//créé un pinceau de couleur rouge
pinceau = CreateSolidBrush(RGB(255, 0,0));
//obtenir les données graphique de la fenêtre
hdc = BeginPaint (hwnd, &ps) ;
//obtenir la taille cliente de la fenêtre
GetClientRect (hwnd, &rect);
//Selectionne le pinceau
SelectObject(hdc, pinceau);
//Dessine un rectangle qui sera notre fond
Rectangle(hdc, rect.left,rect.top,rect.right,rect.bottom);
//faire en sorte que le fond du texte soit transparent (sinon le tour du texte
//serait blanc sur nue fenêtre grise...)
SetBkMode( hdc, TRANSPARENT);
//ecrire le texte
TextOut(hdc, a, 86, text1 , lstrlen(text1));
TextOut(hdc, 140, 110, text2 , lstrlen(text2));
//fin de la procédure de dessinage
EndPaint (hwnd, &ps) ;
return 0 ;

//si on clique gauche

case WM_LBUTTONDOWN:
MessageBox(hwnd,"Vous venez de cliquer sur le bouton gauche de la sourie :-)","Sa Marche",MB_OK);
return 0 ;
//si on clique droit

case WM_RBUTTONDOWN:
strcpy(text1,"Vous venez de cliquer ");
//MessageBox(hwnd,"Vous venez de cliquer sur le bouton droit de la sourie :-)","Sa Marche",MB_OK);
return 0 ;

//si faut quitter
case WM_DESTROY:
//alors mettre un message "WM_QUIT" dans la file d'attente
PostQuitMessage (0) ;
return 0 ;

}

//tous les messages dont nous ne nons servons pas sont renvoyés au système
return DefWindowProc (hwnd, message, wParam, lParam) ;

}



Voila mon code enfait tu a raison sa devait etre que je le remplissait trop car maintenant sa marche sauf que je suis confronter a un nouveau probleme : le texte qui s'affiche ne change pas alors que je lui di de changer avec le strcpy. sa me fait pareille avec les variable int. j'arrive pas a trouver pourquoi
++
mardi 4 mai 2004 à 19:02:38 | Re : Pb avec strcpy et win32

ymca2003


il faut demander de redessiner la fenêtre après strcpy :
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd):

lors de la déclaration des chaînes, t'es pas obligé de mettre la taille si tu l'initialise derrière:
char text1[]="C'est chaud le Win32. Mais j'y arrive";
char text2[]=": - )";
mardi 4 mai 2004 à 19:23:10 | Re : Pb avec strcpy et win32

ToToL

Membre Club
Merci maintenant sa marche mais c'est quel fonction qui met a jour la variable ? InvalidateRect ou UpdateWindow car a la base mon probleme c'etait sa.

Pourai tu mindiquer un lien vers un tuto super simple qui explique en detail tout le debut de la prog win32 ?

merci et ++
mardi 4 mai 2004 à 19:29:09 | Re : Pb avec strcpy et win32

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Va voir ce tutorial là, il est très bien fait :
http://bob.developpez.com/tutapiwin/

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
mardi 4 mai 2004 à 20:13:56 | Re : Pb avec strcpy et win32

ToToL

Membre Club
Merci mais ce tuto je c pas pourquoi mai j'arrive pas a le comprendre meme en le lisant des dizaine de fois.

En fait j'ai compri mon probleme : la varaible est changer , de ce coter la aucun probleme mais l'affichage n'est pas mis a jour donc le texte restai et avec InvalidateRect(hWnd, NULL, TRUE); sa me fait une actualisation de toute ma fenetre donc c bon. par contre UpdateWindow(hWnd): si je ne le met pas sa ne change rien donc il ne doit pas servir.

Encore merci les gars ...........
Si vous avez un autre tuto je suis preneur

++
mardi 4 mai 2004 à 20:22:03 | Re : Pb avec strcpy et win32

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
InvalidateRect permet d'envoyer un message WM_PAINT pour redessiner toute la fenêtre selon les paramètres passés. UpdateWindow n'est donc pas obligatoire après.

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
mercredi 5 mai 2004 à 11:44:22 | Re : Pb avec strcpy et win32

ymca2003

ça permet simplement d'outre passer la chaîne des mesage et d'apeler directement la WndProc avec WM_PAINT sans attendre qu'il passe par la file d'attente.

sinon, il te suffit de passer à la place de NULL le rectangle de la zone à mettre à jour (celle qui doit afficher le texte modifié).


Cette discussion est classée dans : fonction, pb, mis, win32, strcpy


Répondre à ce message

Sujets en rapport avec ce message

Urgent : FtpPutFile pb [ par Xentor609 ] salut !J'ai un probleme lors de l'utilisation de la fonction FtpPutFile:voici un mroceau de la source:strcpy ( FileToSend, "c:\\temp\\send.txt");strcp Pb de class [ par SfyLer ] Imaginons :class teste{public:void fonction();void fonction2();};int teste::fonction() {int a = 1;return 0;}int teste::fonction2() {//ici j'aimerais r fonction system avec windows [ par darkalpha ] jutilise un programme afin de détecter quand un overflow se produit (le nombre de caractères) et le pb c que le programme entré avec system n'existe p PB d'E/S fichier avec une DLL [ par huberdine ] Je cherche a faire une DLL en C, dans la quelle je puisse faire des E/S fichier.Mon probleme est le suivant : la fonction fopen refuse de fonctionner pb label [ par mat74 ] salut a ts j'ai encore 1 pb , cette fois ci , avec un label .j'ai placer un label ds une fonction qui se trouve ds un fichier.h ( debut:; ) je fais Pb CreateThreadddd !!!!!!!!!!! [ par neub ] Salut à tous, j'ecris un module de visionnement d'image etje souhaiterai pouvoir stopper ma fonction OnPlay au moment voulu mais j'ai un pb a la creat Pb de paramétre d'une fonction [ par Thanatos ] Salut,J'aimerais faire une fonction qui a pour paramétre d'entrée un entier, une chaine de caractéres ou un tableau ( n'importe qoui en vérité).Commen pb avec variable [ par jeffise57 ] Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai Lien DLL 16 / API WIN32 [ par CoreBreaker ] Bonjour quelqu'un sait-il comment une fonction de l'API Win32 dans une DLL 16bits ?Et de manière générale comment appeler une fonction d'une DLL 32bit Pb avec la fonction free en C [ par Cako19 ] Bonjour,J'ai un problème lorsque je souhaite libérer une chaîne de caractère et je ne trouve pas la réponse dans le forum bien que le sujet ait déjà é


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales