Pointeur ou *pointeur en C++?
Résolu
olivbarb
Messages postés
318
Statut
Membre
-
le père -
le père -
Bonjour,
J'ai un soucis avec les pointeurs. Voici mon code
Ce qui me parait bizarre c'est que si je remplace caract et caracCrypter par des char et non plus des pointeurs sur char et que dans le code je mets &caract et &caracCrypter (et que je supprime les étoiles) je n'ai plus aucun soucis.
J'ai un soucis avec les pointeurs. Voici mon code
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
FILE *fichierOuvert = NULL;
FILE *fichierCrypteOuvert = NULL;
char fichier[100];
char fichierCrypte[100];
char mot[10] = {0};
char *caract;
int i = 0;
char *caracCrypter;
cout << "Quel est le nom du fichier a crypter?";
cin >> fichier;
cout << "Quel est le nom du fichier crypte ?";
cin >> fichierCrypte;
cout << "Quel est le mot qui servira a crypter ?";
cin >> mot;
fichierOuvert = fopen(fichier, "rb");
fichierCrypteOuvert = fopen(fichierCrypte, "wb");
if (fichierOuvert != NULL)
{
while(fread(caract, sizeof(char), 1, fichierOuvert))
{
if (mot[i] == '\0')
{
i = 0;
}
*caracCrypter = *caract ^ mot[i];
fwrite(caracCrypter, sizeof(char), 1, fichierCrypteOuvert);
i++;
}
fclose(fichierOuvert);
fclose(fichierCrypteOuvert);
}
else
{
cout << "impossible d'ouvrir le fichier" << endl;
}
return EXIT_SUCCESS;
}
Ce qui me parait bizarre c'est que si je remplace caract et caracCrypter par des char et non plus des pointeurs sur char et que dans le code je mets &caract et &caracCrypter (et que je supprime les étoiles) je n'ai plus aucun soucis.
A voir également:
- Pointeur ou *pointeur en C++?
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur laser publicitaire ✓ - Forum Loisirs / Divertissements
- Le pointeur de la souris - Guide
3 réponses
Bonsoir
Encore et toujours le problème des pointeurs non initialisés.
Un pointeur est fait pour contenir l'adresse d'une variable.
Pour pouvoir faire *pointeur=nombre, il faut que pointeur contienne l'adresse de quelque chose, sinon nombre va être mis où ???
Dans ton programme ci-dessus tu utilises carac et caractCrypter dans jamais les avoir initialisés. Tu vas donc écrire n'importe où dans la mémoire, ça plante.
Par contre quand tu définis carac comme un char, tu as défini une variable - un emplacement mémoire qui peut effectivement contenir un caractère, donc pas de problème pour écrire dedans. Quant aux fonctions fread et fwrite qui attendent un pointeur sur caractère, il faut leur donner non pas le caractère lui même, mais son adresse grâce à l'opérateur &
Encore et toujours le problème des pointeurs non initialisés.
Un pointeur est fait pour contenir l'adresse d'une variable.
Pour pouvoir faire *pointeur=nombre, il faut que pointeur contienne l'adresse de quelque chose, sinon nombre va être mis où ???
Dans ton programme ci-dessus tu utilises carac et caractCrypter dans jamais les avoir initialisés. Tu vas donc écrire n'importe où dans la mémoire, ça plante.
Par contre quand tu définis carac comme un char, tu as défini une variable - un emplacement mémoire qui peut effectivement contenir un caractère, donc pas de problème pour écrire dedans. Quant aux fonctions fread et fwrite qui attendent un pointeur sur caractère, il faut leur donner non pas le caractère lui même, mais son adresse grâce à l'opérateur &
Même si j'initialise mes 2 pointeurs a NULL, cela ne change rien. De plus quand je défini char *caract = NULL, un emplacement mémoire est bien réservé. Emplacement qui ne contiendra qu'une adresse, non ?
pardon fausse manoeuvre
quand je défini char *caract = NULL tu réserves de la place pour un pointeur, mais il ne pointe sur aucune zone mémoire. Tu n'as pas réservé de place pour un caractère.
Il fait faire, entre autres possibilités :
caract = &caractere ( où caractère est déjà défini) ou
caract= malloc(sizeof(char)) (allocation dynamique) ou
caract = autreptr (où autreptr est un char * déjà initialisé)
quand je défini char *caract = NULL tu réserves de la place pour un pointeur, mais il ne pointe sur aucune zone mémoire. Tu n'as pas réservé de place pour un caractère.
Il fait faire, entre autres possibilités :
caract = &caractere ( où caractère est déjà défini) ou
caract= malloc(sizeof(char)) (allocation dynamique) ou
caract = autreptr (où autreptr est un char * déjà initialisé)