【问题标题】:How to fix seg fault when strcat two char pointers [closed]strcat两个字符指针时如何修复段错误[关闭]
【发布时间】:2019-10-18 09:32:35
【问题描述】:

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

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

    return 0;
}

【问题讨论】:

  • 您需要分配足够的空间来存储组合字符串,并且您需要避免修改字符串文字。至少为dns_name2 使用一个大小合适的数组:char dns_name2[128] = "."; 或类似的。如果您必须使用两个char * 值,那么您必须将结果存储在一个数组中。或者使用数组并让dns_name2 指向它。

标签: c segmentation-fault strcat


【解决方案1】:

您的代码中的问题在于以下几行:

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

每个都为dns_namedns_name2 分配一个固定长度 字符数组,每个字符长度为两个字符(一个用于点,一个用于@987654324 @终结者)。

要解决此问题,您需要将字符串声明为更长的数组,能够保存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;

【讨论】:

  • 这应该是公认的答案
【解决方案2】:

你可以试试看。 它使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2014-08-06
    相关资源
    最近更新 更多