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