【发布时间】:2019-03-18 12:38:35
【问题描述】:
我有这个:
char * str = "hahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohoho\0";
如何正确设置格式,打破 80 列? 使用:
char * str = "foo\
bar";
似乎是一个非常糟糕的主意,它会导致未定义的行为,使strlen() 返回无意义的值
编辑:这是我正在谈论的未定义行为:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *s = "haha\
hihi\0";
unsigned i = strlen(s);
printf("Length: %i\n", i);
return 0;
}
imperator@RomaAeterna ~/P/C/undefined> gcc -Wall -Wextra undefined.c
imperator@RomaAeterna ~/P/C/undefined> ./a.out
Length: 14
【问题讨论】:
-
这不会编译,因为您忘记了第二个 sn-p 中的
=。除此之外,我看不到未定义的行为。 -
@Blaze 我用
gcc -Wall -Wextra编译了第二个sn-p(当然是=,谢谢)并且没有收到任何警告。计算出的字符串长度是 10,而不是 6。这对我来说似乎是未定义的行为,尽管我怀疑编译器将制表符缩进作为数字...... -
@TheoFreeman 没错,它将下一行的缩进添加到字符串文字中。查看 Bathsheba 的答案以获得更好的解决方案。
-
@TheoFreeman 公平地说,该解决方案包括更好的解决方案还解释了空格是问题的一部分。需要注意的一点是,该答案的上下文是 SQL 查询,因此额外的空格不是大问题。
标签: c string formatting strlen