【问题标题】:Var args of different type return segmentation fault不同类型的var args返回分段错误
【发布时间】:2021-06-22 19:14:07
【问题描述】:

我有我在可变参数中使用的代码,一个是 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;
}

你能解释一下为什么这是一个分段错误吗?

【问题讨论】:

  • 请不要在代码中添加**来高亮一行,这会与C语法混淆。

标签: c segmentation-fault core


【解决方案1】:

传递给函数的第一个可变参数是*ptr,其类型为long。您正在尝试将其视为char *。这会触发undefined behavior

您需要先阅读long 参数,然后才能阅读char *。阅读完参数后,您还需要致电va_end

long l = va_arg(ap,long);
char *ptr = va_arg(ap,char *);
va_end(ap);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多