我正在为特定枚举数据类型构建验证函数。如果传递的字符串有效,则验证函数返回 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/