所以基本上这个函数在文件中搜索'\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 character或 character 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/