web-dev-qa-db-fra.com

en utilisant la fonction scanf avec des pointeurs vers le caractère

J'ai écrit le morceau de code suivant.

int main(){
   char arrays[12];
   char *pointers;
   scanf("%s",arrays);
   scanf("%s",pointers);
   printf("%s",arrays);
   printf("%s",pointers);
   return 0;
}

Pourquoi cela donne-t-il une erreur lorsque j'écris `scanf ("% s ", pointeurs)?

11
Saurabh.V
char *pointers; 

doit être initialisé. Vous ne pouvez pas numériser une chaîne dans pointers tant que vous ne la dirigez pas vers une adresse. L'ordinateur doit savoir où stocker la valeur qu'il lit à partir du clavier.

int main(){
   char arrays[12];
   char *pointers= arrays;
   scanf("%s",pointers);
   printf("%s",pointers);
   return 0;
}
14
Junior Fasco

Parce que vous écrivez à une adresse en mémoire qui n'a pas été initialisée. L'écriture dans un pointeur de mémoire par un pointeur non initialisé appelle un comportement non défini. Soit allouez suffisamment de mémoire:

pointers = malloc(256);
if(!pointers)
  perror("malloc");
else
  scanf("%255s", pointers);

Ou déclarez-le comme un tableau statique:

char pointers[256];

Vous devriez également envisager d'utiliser fgets () au lieu de scanf ().

Vous voudrez peut-être lire si vous êtes intéressé par fgets ():

Différence entre scanf () et fgets ()

7
Gigi
  • char *pointers; crée une variable de pointeur.
  • pointers est le address pointé par pointers, qui est indéterminé par défaut.
  • *pointers correspond aux données de l'adresse pointée par pointers, ce que vous ne pouvez pas faire tant que l'adresse n'est pas attribuée.

Faites ça.

char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);
4
ATOzTOA

pointers est utilisé sans initialisation, comme int x; printf("%d\n", x);. Vous devez faire pointer votre pointeur vers quelque chose avant de l'utiliser. Quel livre lisez-vous?

2
autistic

pointers est un pointeur unitalisé. Vous n'êtes pas en mesure d'y écrire. Vous devez allouer suffisamment de mémoire pour stocker une chaîne, comme vous l'avez fait avec arrays. Avec un pointeur, il est possible d'utiliser l'allocation dynamique (cf. malloc).

1
md5

Pourriez-vous élaborer sur l'erreur, je ne suis pas autour d'un compilateur en ce moment.

Mais pour que scanf et printf fonctionnent, vous devez avoir ceci en haut de votre programme:

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

Les deux sont des bibliothèques standard pour C. IO contient scanf, je suis presque sûr que printf est identique. Mais jusqu'à ce que vous sachiez de quelles bibliothèques vous avez besoin pour quelles fonctions cela ne fait pas de mal d'inclure les deux bibliothèques standard pour chaque programme. Essayez également d'utiliser des fichiers d'en-tête personnalisés afin de ne pas avoir besoin d'inclure des # masses pour chaque fichier.

N'oubliez pas les instructions malloc pour l'allocation de mémoire.

Mais je ne suis pas sûr de ce que vous essayez de faire avec votre code, veuillez élaborer?

1
thepratt