2010-11-05 5 views
0

Je construis une fonction de validation pour un type de données d'énumération particulier. La fonction de validation retourne 0 (faux) ou 1 (vrai) si la chaîne passée est valide. En même temps, si la chaîne est valide, le sous-type d'énumération est alors rempli avec l'entrée correcte.Passer les énumérations par référence ... la valeur garbage retournée à

Comme le code l'indique, il remplit correctement le sous-type dans la fonction. J'imprime l'entrée à l'écran pour vérifier. Mais quand je reviens au principal (voir ci-dessous), j'obtiens une valeur de poubelle (parfois '11871397') quand j'imprime la chaîne.

J'ai même essayé ceci avec ou sans déclarer subType comme const. J'ai un certain nombre d'autres fonctions de validation écrites comme ceci et elles traitent toutes le type de référence correctement, ce qui m'a amené à croire que c'est un problème avec l'énumération.

int val_subscriberType (char str[], const enum ns1__subscriberType *subType) 
{ 
    if (strcmp(upStr, "PREPAID") == 0) 
    { 
     enum ns1__subscriberType subType = ns1__subscriberType__prepaid; 
     printf("SubscriberFunction: %d \n", subType); 
     return 1; 
    } 
    else if (strcmp(upStr, "POSTPAID") == 0) 
    { 
     enum ns1__subscriberType subType = ns1__subscriberType__postpaid; 
     printf("SubscriberFunction: %d \n", subType); 
     return 1; 
    }  
    return 0; 
} 

principal

char *recRetTest = "aggressive"; 
enum ns1__recurrentRetrySchemaType recRet; 
if (val_recurrentRetrySchemaType (recRetTest, &recRet)) 
{ 
    printf ("\nRecurrent Retry Schema main: %d \n", recRet); 
} 

PS J'ai pris le code supplémentaire où je convertir la chaîne en majuscules, etc.

Répondre

2

Votre principal problème est que vous re-déclarer subType dans les branches de l'instruction if, qui masque la déclaration des paramètres; En bref, vous attribuez la valeur à un objet différent au paramètre.

Retirez le const dans la déclaration des paramètres, et réécrire les affectations comme

if (strcmp(upStr, "PREPAID") == 0) 
{ 
    *subType = ns1__subscriberType__prepaid; 
    ... 
Questions connexes