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

标签 c pass-by-reference enumeration

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

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

我什至尝试过将 subType 声明为 const 或不声明为 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 我已经取出了将字符串转换为大写等的额外代码。

最佳答案

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

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

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

关于c - 通过引用传递枚举...垃圾值返回到 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107063/

相关文章:

c++ - 通过引用传递 vector 然后调用清除

javascript - 变量/对象是按值传递的吗?为什么我不能用 JavaScript 中的变量更改对象的属性?

java - 为什么逗号(,)不会导致编译错误?

C# - 从文件夹中播放随机声音文件

c++ - 使用编译器定义的宏连接

c - lua ffi 函数共享命名空间

Javascript 将类似变量重构为 for 循环

python - 我的 python 脚本中的枚举没有按预期工作?

c# - 访问 LTO 磁带内存的源代码 (C/C#)

c - 弄清楚这个函数的作用是什么?