Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量参数count调用C函数_C_Printf_Variadic Functions - Fatal编程技术网

使用变量参数count调用C函数

使用变量参数count调用C函数,c,printf,variadic-functions,C,Printf,Variadic Functions,如何重写下面的代码块?我需要通过函数token()提取一些参数,然后用这些参数调用printf。参数的数量未知 char *S[32]; int i=0; while (t) { char *s=token(&t, lineno, 0); assert(i<sizeof(S)/sizeof(S[0])); S[i++]=s; } printf(f, S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], S[8], S

如何重写下面的代码块?我需要通过函数token()提取一些参数,然后用这些参数调用printf。参数的数量未知

char *S[32]; int i=0;
while (t) {
    char *s=token(&t, lineno, 0);
    assert(i<sizeof(S)/sizeof(S[0]));
    S[i++]=s;
}
printf(f, S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], S[8], S[9],
     S[10], S[11], S[12], S[13], S[14], S[15], S[16], S[17], S[18], S[19],
     S[20], S[21], S[22], S[23], S[24], S[25], S[26], S[27], S[28], S[29],
     S[30], S[31]);
char*S[32];int i=0;
while(t){
char*s=标记(&t,行号,0);

断言(i我认为您应该使用vprintf:
array[]={aPointer,aPointer,…,NULL}
这些参数是从命令行获取的吗?如果是,那么使用
argc
argv
main(int-argc,char*argv[])
并将其传递到函数中,以便根据需要对其进行解析,消除了标记化的需要,并将处理多个变量参数:)

附录: 要从文件中读取参数,请执行以下操作:

我为您提供了几个C答案,这取决于您希望如何实现它们,第二个示例代码只是直接读取和转储,第一个读取然后标记化转储9您可以不同地使用它们这只是一个快速演示,演示如何从文件中标记参数:):

#包括“stdio.h”
#包括“stdlib.h”
#包括“string.h”
int main()
{
文件*f;
int-sizerValue=1024;
字符s1[sizerValue],*p;
f=fopen(“testFile.txt”、“r”);
while(fgets(s1,sizerValue,f))
{
while(fgets(s1,sizerValue,f))
{
p=strtok(s1,“n”);
做
{
printf(“%sn”,p);
}
而(p=strtok(NULL,n));
}
}
返回0;
}       
#包括
#定义块1024
int main(){
FILE*f=fopen(“TestFile.txt”、“r”);
整数大小;
字符缓冲区[块];
while((size=fread(缓冲区、块、sizeof(char)、f)>0)
fwrite(缓冲区、大小、大小(字符)、标准输出);
fclose(f);
返回0;
}

您的标记
va_arg
就是这个问题的答案。
参数的数量未知。
循环后,i值。此外,根据情况,如果用户可以输入格式字符串,则该
printf
语句中可能存在严重的安全问题。如果用户输入的格式规范多于参数的最大数量?当
printf
尝试获取不存在的参数时,这将导致未定义的行为。您是否必须假设(j=0;jb)的任何格式都是
f
?例如)的
,但在这种情况下如何构造参数列表?va_arg()宏不是左值…token()函数读取参数(全部是字符串)也许你应该写一个辅助函数来打印变量和参数。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    FILE *f;
    int sizerValue = 1024;
    char s1[sizerValue],*p;
    f = fopen("testFile.txt", "r");
    while (fgets(s1, sizerValue, f))
    {
    while (fgets(s1, sizerValue, f))
    {
        p=strtok(s1, ";n");
        do
        {
             printf ("%sn",p);
        }
        while(p=strtok(NULL,";n"));
        }
    }
return 0;
}       

#include <stdio.h>
#define BLOCK   1024

int main() {
    FILE *f=fopen("TestFile.txt","r");
    int size;
    char buffer[BLOCK];
    while((size=fread(buffer,BLOCK,sizeof(char),f)>0)
            fwrite(buffer,size,sizeof(char),stdout);
    fclose(f);
    return 0;
}