你好我正在创建一个xx_printf函数,并且在一个名为find_correspondence的函数中,我有太多的参数所以我认为我可以创建一个结构并只调用*结构但是当我试图在xx_printf函数中调用find_correspondence我'我得到了一个段落错误!怎么能解决这个问题呢。
int find_correspondance(char *format, char *tab_sign, ptr_fonc *tab_func, int i, va_list ap)
{
int a;
a = 0;
while ((format[i] != tab_sign[a]) && tab_sign[a] != '\0')
a = a + 1;
if (tab_sign[a] == '\0')
{
my_putchar('%');
my_putchar(format[i]);
}
else
tab_func[a](ap);
return (i);
}
int my_printf(char *format, ...)
{
va_list ap;
ptr_fonc *func_tab;
char *flag_tab;
int i;
va_start(ap, format);
func_tab = tab_func(func_tab);
flag_tab = tab_sign(flag_tab);
i = 0;
while(format[i] != '\0')
{
if (format[i] == '%')
{
i += 1;
if (format[i] == '%')
my_putchar('%');
else if (format[i] == '\0')
return ;
else
**find_correspondence(format, flag_tab, func_tab, i, ap);**
}
else
my_putchar(format[i]);
i++;
}
va_end(ap);
}
find_correspondence(format,flag_tab,func_tab,i,ap); 有什么帮助吗?
答案 0 :(得分:0)
我认为问题可能是您在参数列表中的结构名称va_list之前错过了“struct”。它应该如下所示:
find_correspondance(char *format, char *tab_sign, ptr_fonc *tab_func,
int i, ***struct*** va_list ap)
而且,这里有一个小程序可能会被用作先例。
#include <stdio.h>
#include <string.h>
struct namect{
char fname[20];
char lanme[20];
int letters;
};
struct namect getinfo(void);
struct namect makeinfo(struct namect);
void showinfo(struct namect);
int main(void){
struct namect person;
person=getinfo();
person=makeinfo(person);
showinfo(person);
getchar();
return 0;
}
struct namect getinfo(void)
{
struct namect temp;
printf("Please enter your first name.\n");
gets(temp.fname);
printf("Please enter your last name.\n");
gets(temp.lanme);
return temp;
}
struct namect makeinfo(struct namect info)
{
info.letters=strlen(info.fname)+strlen(info.lanme);
return info;
}
void showinfo(struct namect info)
{
printf("%s %s,your name contains %d letters.\n",info.fname,info.lanme,info.letters);
}
答案 1 :(得分:0)
对于va_arg的一些实现......
可能会发生的事情是,每次循环时你应该做一个va_start。 如果你在tab_funca中使用va_arg;呼叫,args将全部读取,并在下一次循环不是他们是第一次,即垃圾。