C 通过引用传递枚举…垃圾值返回到main

C 通过引用传递枚举…垃圾值返回到main,c,pass-by-reference,enumeration,C,Pass By Reference,Enumeration,我正在为特定的枚举数据类型构建一个验证函数。如果传递的字符串有效,验证函数将返回0(false)或1(true)。同时,如果字符串有效,则使用正确的条目填充枚举子类型 正如代码所示,它正确地填充函数中的子类型。我将条目打印到屏幕上进行检查。但是当我返回main(见下文)时,当我打印字符串时,我会得到一个垃圾值(有时是'11871397') 我甚至尝试过使用或不使用const声明子类型。我有许多其他的验证函数是这样编写的,它们都正确地处理引用类型,这使我相信这是枚举的一个问题 int val_su

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

正如代码所示,它正确地填充函数中的子类型。我将条目打印到屏幕上进行检查。但是当我返回main(见下文)时,当我打印字符串时,我会得到一个垃圾值(有时是'11871397')

我甚至尝试过使用或不使用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;
}
主要


p.S我去掉了额外的代码,将字符串转换为大写等。

您的主要问题是在
if
语句的分支中声明
子类型,这隐藏了参数声明;简言之,将值指定给不同于参数的对象

删除参数声明中的
常量
,并将赋值重写为

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