如何解决不同类型的可变参数返回分段错误
我有我在可变参数中使用的代码,一个是 long 类型,另一个是 char 数组类型,它被传递给一个具有可变数量参数 (...) 的函数,当我尝试检索时char [] 它引发了分段错误。
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
int varargs(int num,...);
int main()
{
printf("enter fflush\n");
long opr=77777;
long *ptr=&opr;
char env[10]="QATNLO19\0";
varargs(2,* ptr,env);
return 0;
}
int varargs(int num,...)
{
va_list ap;
va_start(ap,num);
printf("getting char arg\n");
fflush (stdout);
char *ptr=va_arg(ap,char *); // segmentation fault at this line
printf("char is %s",ptr);
return 0;
}
你能解释一下为什么这是一个分段错误吗?
解决方法
传递给函数的第一个可变参数是 *ptr
,它的类型为 long
。您试图将其视为 char *
。这会触发 undefined behavior。
您需要先阅读 long
参数,然后才能阅读 char *
。阅读完参数后,您还需要调用 va_end
。
long l = va_arg(ap,long);
char *ptr = va_arg(ap,char *);
va_end(ap);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。