C 不兼容的整数到指针转换传递';int';至类型为'的参数;常量字符*';

C 不兼容的整数到指针转换传递';int';至类型为'的参数;常量字符*';,c,C,我有以下代码,无法访问EXC_BAD_(代码=1),并有以下警告: 将“int”传递给“const char*”类型的参数的整数到指针转换不兼容 char *printb(fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) { static char string[256]; sprintf(string,fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); return(string); } 此代码正在调用print

我有以下代码,无法访问EXC_BAD_(代码=1),并有以下警告:

将“int”传递给“const char*”类型的参数的整数到指针转换不兼容

char *printb(fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
{
    static char string[256];
    sprintf(string,fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
    return(string);
}
此代码正在调用printb:

    if (gotargs) fname = *(argv++);
    else do {
        printf("file name #%d: ", i+1);
        fname = gets(inbuf);
    } while (*fname == 0);
    if ((gbuf=fopen(fname, "r")) == NULL)
        error(printb("I can't find '%s'", fname));
    printf("reading '%s'...\n", fname);
    if (fgets((lp = inbuf), 512, gbuf) == NULL)
        error("file is empty");
另外,如何正确地将get()转换为fgets()


谢谢

那么,为什么要使用古代风格的函数声明呢

char *printb(fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
{
?

此声明将所有参数声明为
int
s。试图将
char*
指针传递到此函数只会导致灾难。此外,您没有在
printb
调用中提供所有参数,这是另一个灾难

看起来您正试图实现一个参数数目可变的函数。具体来说,该语言支持
参数声明。了解可变函数和
va_列表

您的功能将按照

char *printb(const char *fmt, ...)
{
   static char string[256];
   va_list va;

   va_start(va, fmt);
   vsprintf(string, fmt, va);
   va_end(va);

   return string;
}
或者更好

   ...
   vsnprintf(string, sizeof string, fmt, va);
   ...
尽管返回指向内部静态缓冲区的指针的想法也有缺陷


同时,试图用你的方法“模仿”可变参数是没有希望的。它不会工作。

那么,为什么要使用古代风格的函数声明呢

char *printb(fmt,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
{
?

此声明将所有参数声明为
int
s。试图将
char*
指针传递到此函数只会导致灾难。此外,您没有在
printb
调用中提供所有参数,这是另一个灾难

看起来您正试图实现一个参数数目可变的函数。具体来说,该语言支持
参数声明。了解可变函数和
va_列表

您的功能将按照

char *printb(const char *fmt, ...)
{
   static char string[256];
   va_list va;

   va_start(va, fmt);
   vsprintf(string, fmt, va);
   va_end(va);

   return string;
}
或者更好

   ...
   vsnprintf(string, sizeof string, fmt, va);
   ...
尽管返回指向内部静态缓冲区的指针的想法也有缺陷


同时,试图用你的方法“模仿”可变参数是没有希望的。它不起作用。

您还没有声明
printb()
函数参数的类型。这是故意的,还是你对C很陌生?我写C已经有一段时间了,这段代码本身也很古老。你还没有声明
printb()
函数参数的类型。这是故意的,还是你对C很陌生?我写C已经有一段时间了,这段代码本身也很古老。所以char*printb(char*fmt,a0,a1,a2,a3,a4,a5,a6,a7,a7,a8,a9,a10)是我想要的?所以char*printb(char*fmt,a0,a1,a2,a4,a5,a7,a8,a9,a10)是我想要的?