在C中连接两个字符串并将结果放入第三个字符串

Cai*_*inG 0 c

这纯粹是出于自身利益而不是家庭作业.

#include <stdio.h>

int main(void)
{
    char* str3;

    char* str1 = "Hello";
    char* str2 = "World!";

    while(*str1) str1++;
    while(*str1++ = *str2++);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图更好地理解C指针,并且这样做我想连接两个字符串并将结果放入第三个字符串.上面的(不完整的)代码会导致段错误,我不知道为什么.是不是可以循环指针引用的值并将数据复制到另一个地址?

编辑:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char* str1 = "Hello";
    char* str2 = "World!";

    char *str3 = malloc(strlen(str1) + strlen(str2) + 1);

    while(*str1) *str3++ = *str1++;
    while(*str2) *str3++ = *str2++;

    puts(str3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

新的尝试是在上面,虽然不起作用,但是我需要修复"明显"的项目吗?

Dav*_*rtz 6

    while(*str1) str1++;
Run Code Online (Sandbox Code Playgroud)

这一str1直到它指向字符串常量结束处的终止零字节为止.

    while(*str1 = *str2++);
Run Code Online (Sandbox Code Playgroud)

这会修改字符串末尾的终止零字节,但字符串是常量,因此无法修改.

如果要在内存中组合字符串,则需要分配一些空间来执行此操作或使用这样做的函数.你可以这样做:

char *new_string = malloc(strlen(str1) + strlen(str2) + 1);
strcpy(new_string, str1);
strcat(new_string, str2);
Run Code Online (Sandbox Code Playgroud)

第一行分配足够的空间来保存str1内容,str2内容和终止零字节.