我知道如何在字符串上执行此操作,因此"hello world"
将为"hello world\n"
。但是,如果我有类似char *str = "helloworld".
的东西,并且我想在str的末尾添加\ n,我该怎么做呢?
答案 0 :(得分:8)
你不能这样做。
使用时
char *str = "helloworld";
str
指向无法修改的字符串。除了文字中的字符外,它还没有任何额外的空间可用,所以你不能扩展它的大小。
如果您需要一个与str
相同但添加了换行符的字符串,则需要先制作副本。
char *newstr = malloc(strlen(str) + 2);
strcpy(newstr, str);
strcat(newstr, "\n");
请记住在长度上添加2:添加换行符为1个字节,尾随空符号为另一个。
有关使用
之间差异的详情,请参阅Why do I get a segmentation fault when writing to a string initialized with "char *s" but not "char s[]"?char str[] = "helloworld";
和
char *str = "helloworld";
答案 1 :(得分:2)
您已声明字符串文字,无法修改。您将需要执行以下操作:
char *str;
str = malloc (sizeof (char) * MAX_SIZE);
strcpy (str, "HelloWorld");
strcat (str, "\n");
或者,您应该使用数组。
答案 2 :(得分:0)
正如其他人指出的那样,如果没有某种形式的空间重新分配,则无法在代码示例的str
末尾添加/连接更多字符。
但是,如果我可以回答您的问题的真正目的(您是专门询问添加换行符,而不是仅附加任何文本,这使我认为您正在尝试格式化文本以进行输出),则可以轻松添加将'\n'
与str
一起发送到标准输出时:
printf("%s\n", str);
实际上,您可以通过更改格式字符串在str
之前/之后添加/添加所需的内容:
printf(">>> %s <<<\n", str);
printf()
有很多“朋友”,例如fprintf()
用于输出到文件而不是标准输出,其行为类似。
这样,您无需担心重新分配任何内容以添加换行符或以其他方式格式化文本以进行输出。
有帮助吗?