使用#define字符串打印和警告

时间:2013-08-06 16:03:21

标签: c++ string printf warnings c-preprocessor

我正在使用Qt创建者,它会生成此错误:

  

“警告:格式'%s'需要'char *'类型的参数,

但参数2的类型为'const void *'[-Wformat]“

控制台应用程序正在运行,但如果有办法避免此错误,我感兴趣

#include <iostream> 
#include <stdio.h>

using namespace std;

bool isOpen(FILE *file);
void print(const void *text);

#define FILE_IS_OPEN "The file is now open"

int main()
{
    FILE *f;
    f = fopen("This.txt", "w");

    if(isOpen(f))
    print(FILE_IS_OPEN);

fclose(f);
return 0;
}

bool isOpen(FILE *file) { return file != NULL ? true : false; }
void print(const void *text) { printf("%s\n", text); }

2 个答案:

答案 0 :(得分:2)

只需更改

void print(const void *text);

void print(const char *text);

同样适用于功能定义。

答案 1 :(得分:0)

格式说明符%s表示您正在尝试将字符串输出到控制台,因此它要求您在此处提供除char *之外的字符串的地址, 您可以将其投放到(char *)text并将其传递给printf

此外,您无法将其所拥有的void *指针的内容输出到任何基本数据类型。