Передача перечислений по ссылке ... значение мусора, возвращаемое в main - PullRequest
0 голосов
/ 05 ноября 2010

Я создаю функцию проверки для определенного типа данных перечисления. Функция проверки возвращает 0 (ложь) или 1 (истина), если переданная строка верна. В то же время, если строка действительна, тогда подтип перечисления заполняется правильной записью.

Как код, он правильно заполняет подтип в функции. Я печатаю запись на экран, чтобы проверить. Но когда я возвращаюсь к основному (см. Ниже), я получаю значение мусора (иногда «11871397»), когда я печатаю строку.

Я даже пробовал это с или без объявления subType как const. У меня есть ряд других проверочных функций, написанных так, и все они корректно обрабатывают ссылочный тип, что привело меня к мысли, что это проблема с перечислением.

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;
}

Главная

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

P.S Я вынул дополнительный код, в котором я преобразовал строку в верхний регистр и т. Д.

1 Ответ

2 голосов
/ 05 ноября 2010

Ваша основная проблема заключается в том, что вы повторно объявляете subType в ветвях оператора if, который скрывает объявление параметра; Короче говоря, вы присваиваете значение другому объекту , чем параметр.

Удалите const в объявлении параметра и переписайте назначения как

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