0 votes

Erreur et avertissement concernant 'strcpy'.

J'obtiens une erreur 'strcpy' et un avertissement pour les lignes suivantes :

_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));

_tcscpy(strApplicationName,_T("MyProgram.exe"));

Je ne sais pas pourquoi j'obtiens une erreur ou un avertissement de type "strcpy" puisque je n'utilise pas "strcpy". Les seules lignes liées à ce problème sont les suivantes

LPCTSTR strApplicationName;
LPTSTR strCommandLine;
_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));   //warning is on this line     
_tcscpy(strApplicationName,_T("MyProgram.exe"));       //error is on this line

La sortie est :

1>c:\documents and settings\X.X\my documents\sandbox\sample.cpp(52) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>        c:\program files\microsoft visual studio 8\vc\include\string.h(74) : see declaration of 'strcpy'

1>c:\documents and settings\X.X\my documents\sandbox\sample.cpp(53) : error C2664: 'strcpy' : cannot convert parameter 1 from 'LPCTSTR' to 'char *'

1>        Conversion loses qualifiers

Une idée de ce que cela pourrait signifier ?

Ce sont mes en-têtes :

iostream
windows.h
stdio.h
tchar.h
winnt.h

1voto

Agnel Kurian Points 14231

LPCTSTR signifie un const Pointeur TCHAR. Le premier argument de _tcscpy attend un pointeur TCHAR non-const, soit LPTSTR .

Essayez quelque chose comme ça :

TCHAR strApplicationName[2000];
TCHAR strCommandLine[2000[;
_tcscpy(strCommandLine,_T("MyProgram.exe /param1"));   //warning is on this line     
_tcscpy(strApplicationName,_T("MyProgram.exe")); 

PS : Même cela est très probablement incorrect. Donnez-nous plus de contexte (plus de code environnant) et nous serons en mesure de mieux vous aider.

1voto

AndreyT Points 139512

LPCTSTR est un nom de typographie pour un pointeur vers un fichier constant chaîne. Vous ne pouvez pas copier quoi que ce soit dans une chaîne constante.

Quant aux avertissements, c'est quelque chose que le compilateur de Microsoft émet de son propre chef. Si vous voulez utiliser strcpy pour désactiver l'avertissement. Le message lui-même vous indique comment procéder.

0voto

kevingessner Points 7257

strcpy copie les caractères jusqu'à ce qu'il rencontre un \0 terminateur nul. Cela peut provoquer des dépassements de tampon et d'autres désagréments. strcpy_s ne copie que le nombre de caractères spécifié, vous pouvez donc lui demander d'arrêter la copie avant qu'elle ne dépasse le tampon. Voir http://msdn.microsoft.com/en-us/library/td1esda9(VS.80).aspx pour les détails.

0voto

Bertrand Marron Points 9284

L'avertissement vous indique que strcpy est déprécié (évidemment _tcscpy appelle strcpy ).

Le premier paramètre de _tcscpy est la chaîne de destination, elle ne peut donc pas être constante. Le "C" dans LPCTSTR signifie const .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X