我们清理了大量警告。在某些情况下,我们将%s替换为%d。一切似乎没问题,直到我们意识到生成的代码无法编译 - 字符串已被数字替换。
注意:我在复制和粘贴时检出了错误的版本。 fprintf字符串已被编辑!
GCC输出
fedex_plus / classes.c:2425:3:警告:格式'%s'期望参数类型为'char *',但参数3的类型为'int' [-Wformat]
第2424行和第2425行:
fprintf(file, "\n//\t%s_ptr create_TIE();\n\tIDL_Application_instance_ptr create_TIE();\n",
ENTITYget_CORBAname(entity));
功能ENTITYget_CORBAname:
const char *
ENTITYget_CORBAname (Entity ent)
{
static char newname [BUFSIZ];
strcpy( newname, ENTITYget_name(ent) );
newname[0] = ToUpper (newname [0]);
return newname;
}
答案 0 :(得分:10)
我敢打赌,ENTITYget_CORBAname
点上没有fprintf
声明。如果是这种情况,则默认为隐式签名:
int ENTITYget_CORBAname(...);
因此关于结果类型的警告是int
。
使用-Wimplicit
(隐含-Wall
)检查您的代码,或尝试放置
const char *ENTITYget_CORBAname (Entity ent);
在fprintf
行之前并检查警告是否消失。如果是,那么你可能会错过一个标题。
答案 1 :(得分:1)
如果要打印指针值,请使用%p
,如果要打印从函数返回的字符串,请使用%s
。在任何这种情况下都不要使用%d
。请参阅here。
答案 2 :(得分:1)
我假设ENTITY_GETCorbaName()
返回一个字符串,因此如果要打印它,请使用%s
。如果要将其打印为指针,请使用%p
。
答案 3 :(得分:0)
在%s
中使用printf
打印该字符串,或使用%p
中的printf
显示指针值,您也可以使用%lld
打印值