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)?
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;
}
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 ():
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);
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?
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
).
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?