如何在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);