我在转换文件中的字符缓冲区时遇到问题*(当然,如果这是可能的话!).
我有一个枚举定义如下:

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);
}

10-08 12:00