Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > Problème avec typages de caractères > Lecture du sujet

Problème avec typages de caractères

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Zoloom # Posté le 17/05/2008 à 17:11:02
Cauchemard compilatoire
Avatar
Groupe : Membres
Bonjour,

Je me sert actuellement de la fonction popen(). Le soucis c'est que je dois concaténer des char* pour ne lancer qu'une seule et même commande console avec des paramètres variables :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
wxDir dirPOLExist;
	
	char* charBashDefaultTrue = _T("bash ");
	
	char* charFileRun = _T("");
		
	char* charBashCommandRun;
	
	SaveCurrent();
	charFileRun = _T("/tmp/currentpolsc");
	
	strcat(charBashCommandRun, charBashDefaultTrue);
	strcat(charBashCommandRun, charFileRun);
	
	popen(charBashCommandRun, _T("r"));


Au final j'ai ces erreurs, et je ne sais pas comment les résoudre :

Code : Console
Fenp.cpp: In member function «void Fenp::RunScript(wxCommandEvent&)»:
Fenp.cpp:541: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:543: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:548: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:553: erreur: cannot convert «const wchar_t*» to «const char*» for argument «2» to «FILE* popen(const char*, const char*)»


Un grand merci à ceux qui me porteront secours :)




 
Hors ligne gogohan # Posté le 17/05/2008 à 17:17:53
Avatar
Groupe : Membres
Coucou ^^

alors, je te mets un exemple pour les chaines :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <string.h>

char *str1 = NULL;
char *str2 = "mon_test";

str1 = strdup("Voici ");

str1 = realloc(str1, sizeof(char) * (strlen(str1) + strlen(str2)));

str1 = strcat(str1, str2);

/* Edit:  un oubli :-° */

free(str1);
str1 = NULL;


évidemment, je n'ai fait aucun tests, mais la valeur de retour en cas d'erreur de strdup, de realloc et de strcat est normalement de NULL.

@+
Édité le 17/05/2008 à 17:20:17 par gogohan

Codeur amateur C, C++, obj-c, TI-Basic, Python... ;)
 
Hors ligne -ed- # Posté le 17/05/2008 à 17:22:07
C is a sharp tool
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : Zoloom

Au final j'ai ces erreurs, et je ne sais pas comment les résoudre :
Code : Console
Fenp.cpp: In member function «void Fenp::RunScript(wxCommandEvent&)»:
Fenp.cpp:541: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:543: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:548: attention : deprecated conversion from string constant to «char*»
Fenp.cpp:553: erreur: cannot convert «const wchar_t*» to «const char*» for argument «2» to «FILE* popen(const char*, const char*)»


- L'extension du code source devrait être .c et non .cpp
- Tu dois compiler en C si tu écris du C.
- L'extension _T() est propre à Visual C++. Tu utilises les caractères étendus ? Si c'est le cas, le type est wchar_t (ou WCHAR avec Visual C++ et les macros _T()) et les fonctions correspondantes .
- Tu utilises un pointeur sur char non initialisé comme destination à strcat(). Le comportement est indéterminé.

Ceci fonctionne :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>

int main (void)
{
   char const *charBashDefaultTrue = "bash ";
   char const *charFileRun = "/tmp/currentpolsc";
   char charBashCommandRun[128];

   *charBashCommandRun = 0;
   strcat (charBashCommandRun, charBashDefaultTrue);
   strcat (charBashCommandRun, charFileRun);

   printf ("'%s'\n", charBashCommandRun);
   return 0;
}

Édité le 17/05/2008 à 17:27:10 par -ed-

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne Zoloom # Posté le 17/05/2008 à 17:25:56
Cauchemard compilatoire
Avatar
Groupe : Membres
Bonjour,

Non en fait c'est bien normal, je code bien en C++ (avec wxWidgets), mais étant donné que popen() n'existe qu'en C, je suis obligé de faire cette section en C (oui je sais cay le mal mais je n'ai pas d'autres solutions).

_() _T() ne sont pas propres a Visual C++, je m'en sert pour traduire mon interface avec des catalogues *.po. En plus je suis sous Linux :)

Pourrais-tu m'expliquer ta phrase : "- Tu utilises un pointeur sur char non initialisé chaine de caractère comme destination à strcat(). Le comportement est indéterminé." ?

Merci ^^

------

J'ai pas vu ton edit excuse moi.

------

EDIT 2 :

Bon du coup j'ai pu trouver une solution pour ne pas avoir à concaténer mes char*, donc le problème n'a plus lieu d'être :)

Merci en tout cas, si le problème se représente je saurais comment faire ;)
Édité le 17/05/2008 à 17:34:42 par Zoloom




 
Hors ligne -ed- # Posté le 17/05/2008 à 17:33:01
C is a sharp tool
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : Zoloom
Non en fait c'est bien normal, je code bien en C++ (avec wxWidgets), mais étant donné que popen() n'existe qu'en C, je suis obligé de faire cette section en C (oui je sais cay le mal mais je n'ai pas d'autres solutions).

[C++] Ben si. Tu as le droit d'écrire un module en C pur dans un projet C++. Il doit avoir l'extension .c et être compilé en C. Les interfaces doivent être protegées par extern "C" et ne comporter aucun mot clé du C++.
Citation : Pas de titre

_() _T() ne sont pas propres a Visual C++, je m'en sert pour traduire mon interface avec des catalogues *.po. En plus je suis sous Linux :)

OK. Il est possible que cette extension soit utilisée ailleurs. Elle a quelle signification pour ton compilateur ?
Citation : Pas de titre

Pourrais-tu m'expliquer ta phrase : "- Tu utilises un pointeur sur char non initialisé chaine de caractère comme destination à strcat(). Le comportement est indéterminé." ?

Typo : corrigée.

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne Zoloom # Posté le 17/05/2008 à 17:38:44
Cauchemard compilatoire
Avatar
Groupe : Membres
Alors pour répondre à ta question:

_() et _T() n'à pas réellement de signification pour g++. En fait je me sers de poedit (pour internationaliser mes applications) et ce logiciel relève toutes les chaînes du type _() et les traduit ensuite. _T() par contre ne changent pas quelque soit la langue (path...).

Je vais mettre cette fonction C dans son fichier .c (la veinarde elle à un fichier source pour elle toute seule :) ).

Voilà merci pour ton aide en tout cas :)
Édité le 17/05/2008 à 17:39:35 par Zoloom




 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 139 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.022s (0.0074s)