我在转换文件中的char缓冲区时遇到了问题*(当然,如果这是可能的话!)我有一个枚举定义为:
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”、“the”、“ex cetera”)作为散列表中的键;为此,我希望将打印出来的printSchemaType()字符串存储在变量中,也许可以使用sprintf:
char buffer[25];
sprintf(buffer,"%s",printSchemaType_output);
问题是,我需要在变量中获得函数输出!我知道我可以:
storeSchemaTypeInsideBuffer(const char* buffer,SchemaType type);
..。情况,但我不喜欢,因为我不想要这样的小事情多余的代码;void printSchemaType(const char* buffer,SchemaType schemaType)
,但我不喜欢这样做,因为还有其他函数,比如printSchemaType和一个相似的原型(printTYPE(FILE* f, TYPE typevariable)
),而改变它的原型会在这个唯一的函数和其他的函数之间创建一个不同的原型;我正在考虑的解决方案是将char缓冲区转换为一个文件*变量:这样我就可以这样做:
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语言中这样的事情可能发生吗?如果是的话,我该怎么做?
发布于 2014-07-10 10:08:24
不是您要求的,但我会重写您的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);
}
https://stackoverflow.com/questions/24683052
复制相似问题