c 中的字符串并通过 printf 打印字符串

Riy*_*al -3 c string

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

int main()
{
    char s1[]="harry ";
    char s2[]="is a friend of ";
    char s3[]="ravi";
    char s4[20];
    char s5[20];
    strcpy(s4,strcat(s1,s2));
    strcpy(s5,strcat(s4,s3));
    printf("%s", s5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我在这里遇到分段错误为什么它不使用 printf 打印..?

我尝试使用 printf 它没有打印,但使用 put 它打印为什么这样?请有人告诉我这有什么问题

Bar*_*mar 5

strcat()将连接的字符串放入其第一个参数中。由于s1的长度仅足以容纳初始化时使用的字符串,因此在连接到自身时不能将其用作目标。

您应该复制第一个字符串,然后在目标中连接第二个字符串,而不是用作strcat()的源。strcpy()

您还需要增大目标字符串,以便它们有空间容纳最终字符串(包括终止 null)。

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

int main()
{
    char s1[]="harry ";
    char s2[]="is a friend of ";
    char s3[]="ravi";
    char s4[30];
    char s5[30];
    strcpy(s4, s1);
    strcat(s4, s2);
    strcpy(s5, s4);
    strcat(s5, s3);
    printf("%s\n", s5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过动态声明大小来确保目标字符串足够长:

char s4[sizeof s1 + sizeof s2];
char s5[sizeof s4 + sizeof s3];
Run Code Online (Sandbox Code Playgroud)

  • @Chris我确实考虑过写这个,但认为对于这个简单的例子来说它比必要的更复杂 (3认同)