これは私が実装したstrcat関数ですが、行に移動するとセグメンテーション違反が発生し*dst++ = *src++;
ます。そこから次の文字列を追加したいので、src
までインクリメントしました。'\0'
セグメンテーション違反が発生する理由を教えてください。私は何か論理的な間違いをしているの*dst++ = *src++;
ですか?
char *strconcat(char *dst, char *src)
{
char *fdst;
fdst = dst;
if (dst == '\0' || src == '\0')
return fdst;
while (*dst != '\0')
dst++;
while (*src != '\0')
*dst++ = *src++;
return fdst;
}
ねえ、私は以下に示す多くの解決策を経験し、次の変更を加えましたが、2つの文字列を連結し始めると、セグメンテーションの問題が発生します。これが私のコード全体です。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *strconcat(char *dst, const char *src);
void main()
{
char *str1 = "Stack";
char *str2 = "overflow";
printf("MY CONCAT:%s\n",strconcat(str1, str2));
printf("INBUILT CONCAT:%s\n",strcat(str1, str2));
}
char *strconcat(char *dst, const char *src)
{
char *fdst;
int dst_len = 0, src_len = 0;
dst_len = strlen(dst);
src_len = strlen(src);
fdst = (char *) malloc(dst_len + src_len + 1);
fdst = dst;
if (src == NULL)
return fdst;
while(*dst)
{
dst++;
fdst++;
}
while(*src)
*fdst++ = *src++;
*fdst = '\0';
return fdst;
}