c - 如何修复 "warning: multi-character character constant [-Wmultichar]"

标签 c

所以基本上这个函数在文件中搜索'\t'(制表符)字符,当它找到它时,它假设用'^I'替换它

问题是 c = '^I' 产生警告 warning: multi-character character constant [-Wmultichar]。另一个问题是只有 I 出现而不是 ^。

如果我将其更改为 c = "^I" 我会收到此警告“警告:赋值从指针生成整数而不进行强制转换”。这种方式也把 "\\"代替 ^I

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

if ((fileContents = fopen("fileContents.txt", "r")) == 0) 
{
    perror("fopen");
    return 1; 
}

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

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

最佳答案

你不能在字 rune 字中放置两个字符。 '^I' 这里有两个字符——^I。 这是负责警告:

multi-character character constant

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


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

char *string;

string = "^I";

printf(string);

您可以使用 pragma warning 指令关闭警告。不要那样做。警告是有原因的。

关于c - 如何修复 "warning: multi-character character constant [-Wmultichar]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31064435/

相关文章:

c - 这是在 C 中执行这些乘法的最佳方法

c - If 语句不断循环 - c

c - 关于 c 中的 ,​​,addrinfo"的一些信息?

c - sprintf 生成一堆文件名

c - ARM : How does objcopy know which sections from an elf to include in a binary or ihex?

c - 将字符串数组作为参数传递给 C 中的函数

c - 如何使用 'for' 循环重复 'do while' 循环

c - 用于创建 2 个结构的单个 malloc

c++ - 在我的 linux 中调用了哪个版本的 close(),来自 posix lib 还是内核?

c - 为什么我的最小值显示一些垃圾值?