如何最好地在C中格式化很长的字符串常量?

时间:2019-03-18 12:38:35

标签: c string formatting strlen

我有这个:

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

2 个答案:

答案 0 :(得分:5)

您可以使用多行,例如:

char* str = "line1"
            "line2"
            "line3";

例如。将""视为编译时串联运算符;实际上,一个字符串的结尾"与下一字符串的开头"之间的任何空格都足够。

答案 1 :(得分:-2)

最好的想法是对此使用预处理程序,因为这不使用内存(在嵌入式系统中很重要):

#define TEXT "jfsdkfnkd jfsn kjdsjkdsf ndjkksnfjkdsnf njdsjkfdnfkjdsfnd\
dkf dfhfhjfbdsfhjbffjsbdhfds"
strlen(TEXT);