簡體   English   中英

strcat兩個字符指針時如何修復段錯誤

[英]How to fix seg fault when strcat two char pointers

由於我的代碼帶有指針,我遇到了分段錯誤。 (需要指針。)

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

    return 0;
}

您的代碼中的問題是這些行:

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

每個都為dns_namedns_name2分配一個固定長度的字符數組,每個字符長度為兩個字符(一個用於點,一個用於nul終止符)。

要解決此問題,您需要將字符串聲明為更長的 arrays,能夠保持strcat調用結果的最大預期長度:

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

此外,在您的 output 行中,您不應取消引用字符串指針,因此: 而不是:

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

利用:

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

希望這可以幫助。 隨時要求進一步澄清和/或解釋。

編輯:如果您需要dns_namedns_name2作為實際指針,那么您可以創建字符 arrays 作為單獨的變量並將您的指向它們:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM