Comment définir un pointeur sur une structure
Je sais que c'est un très basique problème, mais je ne peut pas avancer sans elle, et ce n'est pas clairement expliqué ailleurs.
Pourquoi est-ce la programmation de me donner autant d'erreurs de l'identificateur non déclaré? Je l'ai annoncé, cependant.
Ce sont les erreur que j'obtiens.
Error 2 error C2143: syntax error : missing ';' before 'type'
Error 3 error C2065: 'ptr' : undeclared identifier
Error 4 error C2065: 'contactInfo' : undeclared identifier
Error 5 error C2059: syntax error : ')'
Error 15 error C2223: left of '->number' must point to struct/union
et plus...
#include<stdio.h>
#include<stdlib.h>
typedef struct contactInfo
{
int number;
char id;
}ContactInfo;
void main()
{
char ch;
printf("Do you want to dynamically etc");
scanf("%c",&ch);
fflush(stdin);
struct contactInfo nom,*ptr;
ptr=(contactInfo*)malloc(2*sizeof(contactInfo));
nom.id='c';
nom.number=12;
ptr->id=nom.id;
ptr->number=nom.number;
printf("Number -> %d\n ID -> %c\n",ptr->number,ptr->id);
}
Ne jamais appeler
peut-être que vous devriez lire le C livre avec plus d'attention
et
pourquoi donc? J'ai lu que quand vous prenez d'entrée de unser utilisation de scanf vous faire un fflush pour enlever le \n dans le pipeline?
fflush
sur stdin
- il de l'UB.peut-être que vous devriez lire le C livre avec plus d'attention
et
void main()
;-(pourquoi donc? J'ai lu que quand vous prenez d'entrée de unser utilisation de scanf vous faire un fflush pour enlever le \n dans le pipeline?
fflush
n'est valable que pour la sortie ou de la mise à jour des flux - utilisation fpurge
pour les flux d'entrée, ou tout simplement appeler getchar()
à jeter un caractère superflu.OriginalL'auteur SLearner | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Ce code définit 2 choses:
ContactInfo
struct
nommécontactInfo
Avis la différence de la
c
etC
!Dans votre code, vous utilisez un mixte des deux, ce qui est permis (même si confus à mon humble avis).
Si vous utilisez le
struct
variante, vous devez utiliser explicitementstruct contactInfo
. Pour les autres variantes (ContactInfo
) vous doit d'omettre lestruct
partie car il fait partie de la définition de type alteady.Donc être prudent avec les deux définitions différentes de votre structure. Le mieux serait d'utiliser l'une des variantes.
Je n'ai pas de Visual Studio à la main, mais le suivant (corrigé) code compile avec gcc correctement sans aucun avertissements:
(J'en ai laissé pas si intéressant/non modifié certaines parties du code)
J'ai ajouté une version fixe de votre code qui compile correctement avec gcc à ma réponse à montrer les corrections nécessaires
OriginalL'auteur Veger
Ce:
est faux, il n'y a pas de type de
contactInfo
.Il y a un
struct contactInfo
, qui esttypedef
:d commeContactInfo
. C est sensible à la casse (et vous devez inclure lestruct
contrairement à la façon dont il fonctionne en C++).Noter également que le prix de la ligne est mieux écrit que:
Depuis la coulée de la valeur de retour de
malloc()
est une mauvaise idée à la C, j'ai enlevé le plâtre. Aussi, en répétant le type est une mauvaise idée car il rend le risque d'introduire d'erreur plus grande, donc je l'ai enlevé.Noter que
sizeof *ptr
signifie "la taille de la le type quiptr
points" et est une chose très utile.Ok, donc j'ai enlevé le transtypage, mais encore sa en me montrant les mêmes erreurs. Je suis avec VS 2010 et ont changé le compilateur c\tc-je encore ne soyez pas quel est le problème ici @détendez-vous . merci bien!
OriginalL'auteur unwind
C est un casse langue.
ptr=(contactInfo)malloc(2*sizeof(contactInfo));
qui devrait être:
ptr=malloc(2*sizeof(ContactInfo));
contactInfo
etContactInfo
sont 2 choses différentes. Ainsi, en plus de la casse, c'est quelque chose à garder à l'esprit!Je suis d'accord, info contact est une structure d'étiquette, info contact est une définition de type de cette structure.. si je suis en droit @Veger
C'est bon, d'où mon commentaire que la casse n'est pas le seul problème ici.
-1: Tu ne te feras pas jeté le résultat de malloc en C.
ok.. ton commandement as été entendu!
OriginalL'auteur Aniket Inge
Puisque vous avez défini un typedef,
le premier énoncé ci-dessus peut être écrit comme ci-dessous, si ce que vous avez écrit est également correct, mais qui n'utilise pas efficacement l'
typedef
que vous avez défini.Aussi, depuis
C
est sensible à la casse de la langue,de l'utilisation que vous avez défini dans la définition de type. Capitaliser C danscontactinfo
La
typecasting
que vous faites ne devrait pas être fait, et considéré comme une mauvaise pratique. Commevoid *
est automatiquement et en toute sécurité promu à tout autre type de pointeur dans ce cas demalloc
.J'étais simplement en pointant ses erreurs, ligne par ligne.
Mon mauvais - bas-vote supprimé.
OriginalL'auteur sr01853
Remplacer
avec
-1: Tu ne te feras pas jeté le résultat de malloc en C.
son travail sur ma machine...alors wats le problème..?
voir stackoverflow.com/questions/605845/...
merci...je l'ai eu..
OriginalL'auteur akp
ici, vous êtes à l'aide info contact à typcast où, comme il devrait être struct info contact. et comme vous l'avez typedef en info contact vous pouvez l'utiliser aussi.
OriginalL'auteur Tushar Mishra