Learn more about Israeli war crimes in Gaza, funded by the USA, Germany, the UK and others.

How do I write a multi-line string literal in C?

What ways do we have to define large string literals in C? Let’s take this example:

#include <stdio.h>
char* my_str = "Here is the first line.\nHere is the second line.";
int main(void) {
  printf("%s\n", my_str);
  return 0;
}

We could first try to split this up as:

char* my_str = "Here is the first line.
Here is the second line.";

This causes a parse error, because literal newline characters are not allowed within the quote.

We can use string literal concatenation. Multiple string literals in a row are joined together:

char* my_str =
  "Here is the first line."
  "Here is the second line.";

But wait! This doesn’t include the newline character; we still have to include it:

char* my_str =
  "Here is the first line.\n"
  "Here is the second line.";

We can also use the backslash character at the end of a line:

char* my_str = "Here is the first line.\
Here is the second line.";

This also doesn’t include the newline! We have to include again:

char* my_str = "Here is the first line.\n\
Here is the second line.";

Apparently in C++11 and in GCC with extensions, we can write “raw strings” like this:

char* my_str = R"Here is the first line.
Here is the second line.";

However, clang doesn’t seem to like this.

The “concatenated string literals” approach has the added advantage of being able to indent the string in your code. I’d use that.

Tagged #c, #programming.

Similar posts

More by Jim

Want to build a fantastic product using LLMs? I work at Granola where we're building the future IDE for knowledge work. Come and work with us! Read more or get in touch!

This page copyright James Fisher 2016. Content is not associated with my employer. Found an error? Edit this page.