如何在C中最好地格式化超长字符串常量?
我有这个:如何在C中最好地格式化超长字符串常量?,c,string,formatting,strlen,C,String,Formatting,Strlen,我有这个: char * str = "hahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohoho\0"; 如何正确设置格式,在80列处断开? 使用: 这似乎是一个非常糟糕的主意,它会导致未定义的行为,使strlen()返回无意义的值 编辑:这就是我所说的未定义的行为
char * str = "hahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohohohahahahahihihihihohohoho\0";
如何正确设置格式,在80列处断开?
使用:
这似乎是一个非常糟糕的主意,它会导致未定义的行为,使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
#包括
#包括
内部主(空)
{
char*s=“哈哈\
hihi\0”;
无符号i=strlen(s);
printf(“长度:%i\n”,i);
返回0;
}
imperator@RomaAeterna~/P/C/undefined>gcc-Wall-Wextra undefined.C
imperator@RomaAeterna~/P/C/undefined>/a.out
长度:14
您可以像这样使用多行:
char* str = "line1"
"line2"
"line3";
比如说。将
“
视为编译时串联运算符;事实上,一个字符串的结尾“
和下一个字符串的开头”
之间的空白就足够了。最好的办法是使用预处理器,因为这不使用内存(在嵌入式中有问题):
这不会编译,因为您忘记了第二个代码段中的
=
。除此之外,我没有看到未定义的行为。可能是@Blaze的重复我用gcc-Wall-Wextra
编译了第二个代码段(当然是thx),但没有收到任何警告。计算的字符串长度是10,而不是6。对我来说,这似乎是未定义的行为,尽管我怀疑编译器将制表符缩进作为一个数字…@TheoFreeman没错,它将下一行的缩进添加到字符串文本中。看看芭丝谢芭的答案,找到一个更好的解决方案。@TheoFreeman公平地说,这个解决方案包括更好的解决方案,它还解释了空格是否是问题的一部分。需要注意的一点是,答案的上下文是SQL查询,因此额外的空白不是什么大问题。这不会改进格式,只会将其移动到另一个位置。
char* str = "line1"
"line2"
"line3";
#define TEXT "jfsdkfnkd jfsn kjdsjkdsf ndjkksnfjkdsnf njdsjkfdnfkjdsfnd\
dkf dfhfhjfbdsfhjbffjsbdhfds"
strlen(TEXT);