使用变量参数count调用C函数
如何重写下面的代码块?我需要通过函数token()提取一些参数,然后用这些参数调用printf。参数的数量未知使用变量参数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
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;
}