Cでstrncat
/を使用せずに2つの文字列を連結する関数を作成しようとしていstrcat
ます。これはありますが、セグメンテーション違反エラーが発生します。私は何が間違っているのですか?
char *concat(char *str1, char *str2) {
memcpy(str1 + strlen(str1) - 1, str2, strlen(str2) + 1);
return str1;
}
これは宿題ではありません。これはTI-84Plus CEのCツールチェーン用strncat
であり、この機能では機能しません。str1
文字列リテラルになります。str2
可変になります。
str1
結果全体を受け取るのに十分な大きさのメモリ位置を指していることを確認する必要があります。
char *concat(char const*str1, char const*str2) {
size_t const l1 = strlen(str1) ;
size_t const l2 = strlen(str2) ;
char* result = malloc(l1 + l2 + 1);
if(!result) return result;
memcpy(result, str1, l1) ;
memcpy(result + l1, str2, l2 + 1);
return result;
}
さらに、可能な限り、少なくともいくつかのエラーチェックを追加する必要がありますassert(str1) ; assert(str2) ;
...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加