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_name
和dns_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.
希望这对您有所帮助。随时要求进一步澄清 and/or 解释。
编辑:如果您需要 dns_name
和 dns_name2
作为实际指针,那么您可以将字符数组创建为单独的变量并指向它们:
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;
}
由于我的代码带有指针,我遇到了分段错误。 (需要指针。)
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_name
和dns_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.
希望这对您有所帮助。随时要求进一步澄清 and/or 解释。
编辑:如果您需要 dns_name
和 dns_name2
作为实际指针,那么您可以将字符数组创建为单独的变量并指向它们:
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;
}