首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复“警告:多字符常量[-Wmultichar]”

如何修复“警告:多字符常量[-Wmultichar]”
EN

Stack Overflow用户
提问于 2015-06-26 11:32:45
回答 3查看 26.2K关注 0票数 0

因此,基本上该函数在文件中搜索'\t‘(制表符)字符,当它找到它时,它假定用'^I’替换它

问题是c = '^I'会生成一个警告warning: multi-character character constant [-Wmultichar]。另一个问题是,只有i显示,而不是^。

如果我把它改为c = "^I",我会得到这样的警告:“警告:赋值使整数从指针没有类型转换”。这种方式还将"\“而不是^I

我该如何解决这个问题呢?有没有更好的方法呢?

代码语言:javascript
运行
复制
if ((fileContents = fopen("fileContents.txt", "r")) == 0) 
{
    perror("fopen");
    return 1; 
}

while ((c = fgetc(fileContents)) != EOF)
{

    if (c == '\t')
    {
        c = '^I';
    }
    putchar(c); 
}
EN

回答 3

Stack Overflow用户

发布于 2015-06-26 11:41:44

不能在一个字符文本中放入两个字符。'^I'这里有两个字符- ^I。这是导致该警告的原因:

多字符字符常量

我不确定你在这里想要实现什么,但在C中,你只能用单引号将单ASCII charactercharacter escape sequence放在一起。^是特定于系统的ANSI转义代码,我认为是针对终端颜色的,受DOS和UNIX支持。只要在某个地方使用静态或动态分配声明了它,就可以在字符串中使用它,或者只需使用printf函数将它打印到标准输出流:printf("^I ^O test");

至于隐式声明。我确实假设c被声明为整数或其他某种算术类型。您不能以任何方式为其分配字符串文字。您可以使用strcpy sprintf strncpy等函数来完成此操作。在这种情况下,c必须是静态或动态分配的。为了避免错误的隐式声明,请确保它的类型为char*,因此是一个字符区域,其中最后一个字符是空终止字符。如果你想给一个char*赋值一个字符串值,你可以把它存储在只读内存中。

代码语言:javascript
运行
复制
char *string;

string = "^I";

printf(string);

您可以使用杂注警告指令关闭警告。别干那事。警告的出现是有原因的。

票数 1
EN

Stack Overflow用户

发布于 2015-06-26 11:47:17

char只能是单个字符。'^I'是二。在本例中,您需要在字符上使用if/else,使用普通的printf打印字符串

代码语言:javascript
运行
复制
if (c == '\t') {
    printf("^I");
} else {
    putchar(c);
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-26 11:41:15

很明显,'^I'是两个字符。您不能将putchar与多个字符一起使用,正如gcc警告您的那样,您不希望使用多字符常量。

相反,请确保使用字符串。尝试如下所示:

代码语言:javascript
运行
复制
const char *replacement = NULL;
if (c == '\t') replacement = "^I";

if (replacement) fputs(replacement, stdout);
else putchar(c);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31064435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档