Accueil > Forum > > > > Un char[n] est différent d'un char* ???
Un char[n] est différent d'un char* ???
vendredi 13 août 2010 à 16:51:30 |
Un char[n] est différent d'un char* ???

Polack77
|
Bonjour,
J'ai une erreur TRÈS étrange que vraiment je ne comprend pas
Dans "l'application" :
Code C/C++ : #include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Toto(char** stValeur)
{
strcpy(*stValeur,"toto");
}
int main(int argc, char* argv[])
{
char* test1;
char test2[10];
test1=(char*)malloc(sizeof(char)*10);
Toto(&test1);
printf("%s\n",test1);
free(test1);
EcrieToto((char**)&test2);
printf("%s\n",test2);
return 0;
}
Qui ne fait rien de compliqué (sa on sera tous d'accord je pense)
Bà sa marche pas
Je reçois une erreur :
Code : Unhandled exception at 0x1026f689 (msvcr90d.dll) in test.exe: 0xC0000005: Access violation writing location 0xcccccccc.
Au moment de l'exécution de la ligne < strcpy(*stValeur,"toto");> sur test2.
Pourquoi SVP ???
Un tableau de char est bien équivalent à un char* (non, alors on m'aurais mentie  )
Je me suis donc dit que j'allais remplacer la ligne < Toto((char**)&test2);> par < Toto(&((char*)test2));>. Bà sa marche pas non plus. Sa compile même plus
Code : e:\test\test.cpp(22) : error C2102: '&' requires l-value
J'ai fait ce test sur Visual studio 6 et 2008 avec les mêmes problèmes.
PS :
Sa par contre sa marche :
Code C/C++ : #include <stdio.h>
#include <string.h>
#include <stdlib.h>
void EcrieToto(char** stValeur);
void EcrieToto(char** stValeur)
{
strcpy(*stValeur,"toto");
}
int main(int argc, char* argv[])
{
char* test1;
char test2[10];
test1=(char*)malloc(sizeof(char)*10);
EcrieToto(&test1);
printf("%s\n",test1);
free(test1);
test1 = test2;
EcrieToto(&test1);
printf("%s\n",test2);
return 0;
}
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
vendredi 13 août 2010 à 16:57:50 |
Re : Un char[n] est différent d'un char* ???

Polack77
|
Sa par contre sa marche pas :
Code C/C++ :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void EcrieToto(char** stValeur);
void EcrieToto(char** stValeur)
{
char* test;
test = *stValeur;
strcpy(test,"toto");
}
int main(int argc, char* argv[])
{
char* test1;
char test2[10];
test1=(char*)malloc(sizeof(char)*10);
EcrieToto(&test1);
printf("%s\n",test1);
free(test1);
EcrieToto((char**)&test2);
printf("%s\n",test2);
return 0;
}
Code : Unhandled exception at 0x1026f689 (msvcr90d.dll) in testVincent.exe: 0xC0000005: Access violation writing location 0xcccccccc.
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
vendredi 13 août 2010 à 17:30:19 |
Re : Un char[n] est différent d'un char* ???

CptPingu
|
Ce n'est pas pareil !
char** veut dire: un pointeur sur un pointeur (dans ce contexte)
char*[] veur dire: un pointeur sur un tableau contigüe d'élément.
Ce n'est pas compatible, et ton compilateur a du te le dire (tu l'as d'ailleurs ignoré en castant comme un goret ton tableau pour qu'il passe quand même :p).
Voir:
http://www.coders2020.com/what-is-the-difference-between-char-a-and-char-a
http://c-faq.com/decl/strlitinit.html
Ton exemple est bizarre, parce qu'à ta place j'aurais juste fait:
Code C/C++ :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void ecrieToto(char* stValeur)
{
strcpy(stValeur, "toto");
}
int main(void)
{
char* test1 = NULL;
char test2[10];
test1 = malloc(sizeof(char) * 10);
ecrieToto(test1);
printf("%s\n", test1);
free(test1);
ecrieToto(test2);
printf("%s\n", test2);
return 0;
}
PS: Attention ! Si tu dois caster le retour de malloc c'est qu'il y a 99% de chance que tu utilises un compilateur de C++. Le C et le C++ sont deux langages différents. Tu ne peux pas compiler du C avec un compilo C++ (il y a en C des choses inexistantes ou différentes par rapport au C++, et vice-versa).
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
vendredi 13 août 2010 à 17:33:46 |
Re : Un char[n] est différent d'un char* ???

CptPingu
|
Oupss... Je ne réponds pas clairement à ta question:
Une explication ici:
http://www.generation-nt.com/difference-entre-char-str-et-char-str-entraide-201664.html
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
vendredi 13 août 2010 à 17:44:18 |
Re : Un char[n] est différent d'un char* ???

Polack77
|
Oui mon test est blizzard (forcément c'est un test, ET JE SUIS PAS UN GORET, SI JE FAIT SA C'EST QUE J'AI MES RAISONS  ) c'est un test (tu aurais peut être préférer ma fonction de 80 lignes avec des affectations mémoire dans tout les sens, des tableaux de structures, j'en passe et des meilleur  )
Bon, je me calme et je lit quand même le lient d'explication que tu m'envoie
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
vendredi 13 août 2010 à 17:49:36 |
Re : Un char[n] est différent d'un char* ???

Polack77
|
Bà si, dans 95% des cas on peut compiler du C en C++ je viens d'ailleurs de faire évoluer un projet dans ce sens (ou donne moi un exemple pck moi j'en trouve pas). Le plus souvent des warning en C devienne des erreurs en C++ (comme quand on passe de VS6 -> VS2008) mais il suffis de ne pas être un goret.
Par contre oui passé du C++ au C n'est pas toujours possible (même rarement).
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
vendredi 13 août 2010 à 17:54:21 |
Re : Un char[n] est différent d'un char* ???
|
vendredi 13 août 2010 à 18:01:12 |
Re : Un char[n] est différent d'un char* ???

CptPingu
|
Ce n'était pas précisé.
ET JE SUIS PAS UN GORET, SI JE FAIT SA C'EST QUE J'AI MES RAISONS
Inutile de s'énerver. Je t'ai simplement fait remarquer que contourner le compilateur ce n'était pas propre, pas que tu étais un goret. Qui plus est, maintenant que tu as précisé que c'était un simple test, je comprends tout à fait la raison de cette ligne. Il n'y avait pas de volonté de te blesser, et c'est toujours avec plaisir que je réponds sur ce forum.
Bà si, dans 95% des cas on peut compiler du C en C++ je viens d'ailleurs de faire évoluer un projet dans ce sens (ou donne moi un exemple pck moi j'en trouve pas).
Par exemple le mot clé restrict, qui n'est pas présent en C++ (uniquement sous la forme d'extension sur certains compilateurs, donc non portable).
Quelques exemples supplémentaires ici:
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
PS: Je fait moi aussi plein de fautes d'orthographe, mais remplace au moins tes "sa" par des "ça".
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
vendredi 13 août 2010 à 18:07:43 |
Re : Un char[n] est différent d'un char* ???

Polack77
|
Pour finir (puis je part en week end je serais plus détendu lundi) si ce n'est vraiment pas compatible pk sa, sa marche ? :
Code C/C++ : #include <stdio.h>
#include <string.h>
#include <stdlib.h>
void EcrieToto(char** stValeur);
void EcrieToto(char** stValeur)
{
strcpy(*stValeur,"toto");
}
int main(int argc, char* argv[])
{
char* test1;
char test2[10];
test1 = test2;
EcrieToto(&test1);
printf("%s\n",test2);
return 0;
}
Aller bon week end quand même (évite de me dire que ce n'est pas la penne d'allouer 10 carac pour en stocké 5 sa vas encore m'énerver. Je deviens susceptible une fois qu'on m'a insulter)
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
vendredi 13 août 2010 à 18:26:45 |
Re : Un char[n] est différent d'un char* ???

Polack77
|
Aller je me calme (moi aussi je prend tj plaisir à être sur ce fofo pour posé des questions ou y répondre  )
Vue, oui C -> C++ effectivement peut poser des problèmes, mais sa reste quand même limité (dans les 5% quoi  ) .
Je me rend bien conte que ce wiki n'est pas de toi c'est juste pour en parlé pas pour râlé
Les conversions implicite sont résolut facilement (c'est pas un Warning en C  possible)
Les variables nommées class, new, template, en C ne vont pas marché en C++ c'est logique  (le mieux étant de tj mettre des entête au nom de variable le problème ne se pose jamais si on est propre, "plnClass" pour un pointeur sur long nommé class par exemple ^^)
Pour le "return sizeof(T);" je voie pas trop l'intérêt de faire sa en C, de toute façon il aurais fallut faire "sizeof(struct T)" (ou mettre un typedef).
Le link  oui sa je dit rien je me suis un peut cassé les dents dessus durant ma conversion. Enfin maintenant que je sait comment faire sa ne poseras plus de problème.
Et puis voila ^^
restrict en C  Tiens connais pas (c'est pas pour les collections sa ???)
Enfin bref aller cette fois bon week end (Starcraft II m'attend  )
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo 
|
|
Cette discussion est classée dans : code, include, char, test1, test2
Répondre à ce message
Sujets en rapport avec ce message
Erreur DeviceIoControl ??? pk acces refusé ? [ par akk ]
Bonjour,Voila lorsque j'execute ce code :(on passe le nom du lecteur en parametre exemple : main C)#include #include <iostre
Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ]
Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d
problème de char [ par minet03 ]
Coucoutout le monde, tout d'abord voilà mon code :#include #include #include #include #include #include char *bin_dec(char *binai
Prob avec les variables [ par Ilsundal ]
Bonjour a tous,voila mon probleme, j'ai declaré une variable, mais quand je lui assigne par exemple : MAISON, il m'affiche que M. comment faire pour
comment gerer ce projet pour que deux etudiants n'aient pas le meme code [ par desco182 ]
Salut a tous j'aimerais bien que quelqu'un m'aide .#include#include#include#ifndef ETUDIANT_H#define ETUDIANT_Hclass etudiant{int code;<br /
La class string [ par jderf ]
Je suis débutant et je teste la class string. Voici un code tous simple, mais y'a un probleme de conversion à la compil que je ne comprend pas. Les er
Lecture fichier .config [ par wislam2007 ]
Salut J'ai le code ci-dessous qui permet la lecture d'un fichier .config, le probleme que sous DevCpp marche mais avec visual c++ 6.0 non plus. [code=
problème de fonction de tirage aléatoire en poker [ par moonlight2509 ]
Salut, étant en débutant en langage c mon problème paraît peut-être très bête!! Voilà j'ai un problème d'argument ou de type de fonction dans la fonct
Récupérer le handle d'une fenêtre par survol [ par sunvi ]
Bonjour, je veux récupérer le handle d'un fenêtre par survol, voilà le code que j'ai écrit,enfin, j'ai modifié un code de quelqu'un d'autre pour que ç
DeviceIoControl [ par raphui ]
Salut a tous ! Je développe un " driver " , permettant de cacher un processus dans le Task Manager. Mon problème est que je n'arrive pas a envoyer u
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|