Erreurs C2065 et C2143 [Résolu]

Messages postés
13
Date d'inscription
mercredi 29 juin 2005
Dernière intervention
4 juillet 2012
- - Dernière réponse : cs_thomas71
Messages postés
13
Date d'inscription
mercredi 29 juin 2005
Dernière intervention
4 juillet 2012
- 7 mars 2012 à 09:19
Bonjour,

J'ai un petit problème avec le bout de code ci-dessous. Je travaille sous Visual Studio 2010. Deux erreur apparaissent lors de la compilation : C2065 et C2143

#include <stdlib.h>
#include <stdio.h>


int main(int nbarg, char *argv[])
{

char toto[] =  "aaaa";
toto[2]='b';
printf("%s\n",toto);


char *tata = "bbbb";
printf("%s\n",tata);


system("pause");
return 0;
}


Si je ne commente QUE
char toto[]  = "aaaa";
toto[2]= 'b';
printf("%s\n",toto);

la compilation se fait sans erreur et produit l'effet attendu.

Idem si je ne commente QUE
char *tata  = "bbbb";
printf("%s\n",tata);


Merci de votre aide!
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
La réponse est dans mon premier message:
Si tu es en "pedantic" (version strict du C), alors pense à bien mettre tes déclarations au début d'un block (en C standard, on ne peux mélanger code et déclaration).

En C "strict" (C89), on ne peut mélanger code et déclaration. Il te faut activer l'option C99 pour pouvoir le faire.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
0
Merci
Bonjour.

Quelles sont les erreurs de compilation que tu as ? Je ne voit rien de choquant au niveau de la syntaxe. Et ton code compile parfaitement chez moi. Si tu es en "pedantic" (version strict du C), alors pense à bien mettre tes déclarations au début d'un block (en C standard, on ne peux mélanger code et déclaration).
En revanche, au niveau exécution, je vois une erreur potentielle.

Ceci est valide:
char toto[] = "aaaa";
toto[2]='b';
printf("%s\n",toto);

En effet, on peut écrire dans un char[] = "...".

Ceci ne le serait pas:
char *tata = "bbbb";
tata[2]='b'; // Attention !
printf("%s\n",tata);

Un char* "...", contrairement au char[] "...", est constant. Toute écriture dans tata provoquera un segfault.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
13
Date d'inscription
mercredi 29 juin 2005
Dernière intervention
4 juillet 2012
0
Merci
Quand je compile le programme complet, j'obtiens les erreurs :

error C2143: erreur de syntaxe : absence de ';' avant 'type' c:\users\thomas\documents\visual studio 2010\projects\test1\test1\main.c 13 1 test1

error C2065: 'tata' : identificateur non déclaré c:\users\thomas\documents\visual studio 2010\projects\test1\test1\main.c 14 1 test1
Commenter la réponse de cs_thomas71
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
0
Merci
Et avec ceci ?
#include <stdio.h>

int main(void)
{
  char toto[] = "aaaa";
  char* tata = "bbbb";

  toto[2]='b';
  printf("%s\n", toto); /* Ok */

  tata[2]='b';
  printf("%s\n", tata); /* Segfault ! */

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
13
Date d'inscription
mercredi 29 juin 2005
Dernière intervention
4 juillet 2012
0
Merci
En fait ça fonctionne quand les déclarations des 2 variables sont faites au début! Merci de votre aide! Vous pensez que cette particularité est propre à VS étant donné que vous êtes parvenu à le compiler?

#include <stdlib.h>
#include <stdio.h>


int main(int nbarg, char *argv[])
{
char toto[] = "aaaa";
char *tata = "bbbb";

toto[2]='b';
printf("%s\n",toto);
printf("%s\n",tata);

system("pause");
return 0;
}
Commenter la réponse de cs_thomas71
Messages postés
13
Date d'inscription
mercredi 29 juin 2005
Dernière intervention
4 juillet 2012
0
Merci
Désolé j'avais lu trop vite le message précédent...
Merci en tout cas!
Commenter la réponse de cs_thomas71

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.