strcat两个char指针时如何解决seg错误

时间:2019-10-18 09:32:35

标签: c segmentation-fault strcat

由于带有指针的代码,我遇到了分段错误。 (那里需要指针。)

int main()
{    
    char *dns_name = ".";
    char *dns_name2 = ".";
    printf("HELLO\n");
    strcat(dns_name2,dns_name);
    printf("result: %s", *dns_name2);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

您的代码中的问题是这些行:

char *dns_name = ".";
char *dns_name2 = ".";

每个分配一个{strong> 固定长度 个字符数组给dns_namedns_name2,每个字符长两个字符(一个为点,一个为点)。 nul终止符。

要解决此问题,您需要将字符串声明为更长的数组,能够保留strcat调用结果的最大预期长度:

char dns_name[50] = "."; // Change 50 to the maximum allowable length.
char dns_name[50] = ".";

此外,在输出行中,您不应该取消引用字符串指针!因此,代替:

printf("result: %s", *dns_name2);

使用:

printf("result: %s", dns_name2); // the %s format expects a pointer or array.

希望这会有所帮助。随时要求进一步的澄清和/或解释。

编辑:如果您需要dns_namedns_name2作为实际的指针,则可以将字符数组创建为单独的变量并将其指向它们:

char dns_buffer[50] = ".";
char dns_buffer2[50] = ".";
char *dns_name = dns_buffer;
char *dns_name2 = dns_buffer2;

答案 1 :(得分:-1)

您可以尝试一下。 它使用dns_buffer和dns_buffer2创建一个动态分配的字符串。

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

int main(void) {
    char *dns_name = "hh";
    char *dns_name2 = "hhha";
    char *total_dns = malloc(strlen(dns_name) + strlen(dns_name2) + 1);
    printf("HELLO\n");
    strcpy(total_dns, dns_name);
    strcat(total_dns,dns_name2);
    printf("result: %s", total_dns);

    free(total_dns);
    return 0;
}