我在转换文件中的字符缓冲区时遇到问题*(当然,如果这是可能的话!).
我有一个枚举定义如下:
typedef enum SchemaType{
SCHEMA_INT,
SCHEMA_REAL,
SCHEMA_STRING,
SCHEMA_BOOLEAN,
SCHEMA_CHAR,
SCHEMA_SIMPLE,
SCHEMA_RECORD,
SCHEMA_ARRAY
} SchemaType;
我有一个功能完善的函数,可以打印枚举本身(用于调试目的):
void printSchemaType(FILE* f,SchemaType schemaType){
switch (schemaType){
case SCHEMA_INT: fprintf(f,"int"); break;
case SCHEMA_ARRAY: fprintf(f,"array"); break;
case SCHEMA_BOOLEAN: fprintf(f,"boolean"); break;
case SCHEMA_CHAR: fprintf(f,"char"); break;
case SCHEMA_REAL: fprintf(f,"real"); break;
case SCHEMA_RECORD: fprintf(f,"record"); break;
case SCHEMA_STRING: fprintf(f,"string"); break;
}
}
现在的问题是:我需要使用fprintf打印出来的字符串(即“int”,“char”,“real”,ex cetera)作为哈希表中的键;为此,我想将printSchemaType()的打印字符串存储在一个变量中,也许可以使用sprintf:
char buffer[25];
sprintf(buffer,"%s",printSchemaType_output);
问题是我需要在变量中获取函数输出!我知道我可以:
用开关创建一个新函数。。。但我不想这样做,因为我不想为这样的小事而使用多余的代码;
将“printSchemaType”的原型更改为
storeSchemaTypeInsideBuffer(const char* buffer,SchemaType type);
但我不想这样做,因为还有其他函数,比如printSchemaType,它有一个类似的原型(
void printSchemaType(const char* buffer,SchemaType schemaType)
),改变它的原型会在这个函数和其他函数之间产生一个原型的差异;我想的解决方案是将一个char缓冲区转换成一个FILE*变量:这样我就可以做如下事情:
SchemaType=SCHEMA_INT;
char buffer[25];
FILE* bufferActingAsAFile=make_buffer_acts_as_a_File(buffer);
fprintf(bufferActingAsAFile,type); //now in the buffer there is stored "int"
这样的事情在C语言中有可能发生吗?如果是,我该怎么做?
最佳答案
不是你要求的,但我会重写你的printSchemaType
函数。
创建一个名为SchemaTypeStr
的新函数(或符合命名方案的其他名称),如下所示:
const char* SchemaTypeStr(enum SchemaType type) {
switch(type) {
case SCHEMA_INT: return "int"; break;
case SCHEMA_ARRAY: return "array"; break;
case SCHEMA_BOOLEAN: return "boolean"; break;
case SCHEMA_CHAR: return "char"; break;
case SCHEMA_REAL: return "real"; break;
case SCHEMA_RECORD: return "record"; break;
case SCHEMA_STRING: return "string"; break;
default: abort();
}
}
void printSchemaType(FILE* f,SchemaType schemaType) {
fputs(SchemaTypeStr(schemaType), f);
}