通过引用传递枚举...垃圾值返回main

时间:2010-11-05 14:55:34

标签: c pass-by-reference enumeration

我正在为特定的枚举数据类型构建验证函数。如果传递的字符串有效,则验证函数返回0(false)或1(true)。同时,如果字符串有效,则使用正确的条目填充枚举子类型。

如代码所示,它正确填充函数中的subType。我将条目打印到屏幕上进行检查。但是当我返回main(见下文)时,我打印字符串时会得到一个垃圾值(有时是'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 个答案:

答案 0 :(得分:2)

您的主要问题是您在subType语句的分支中重新声明if,该语句隐藏了参数声明;简而言之,您将值分配给不同对象而不是参数。

删除参数声明中的const,并将作业重写为

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