アフィリエイト広告を利用しています

広告

posted by fanblog

2017年10月02日

《その62》 strcat関数,strncat関数(p.314演習8-10)


strcat関数,strncat関数

strcat関数や strncat関数は、<cstring>ヘッダで提供されています。

strcat関数や strncat関数を含むコードを VC++ でコンパイルしようとすると、安全でない可能性があるという警告が出ます。
VC++ はコンパイルもしないので、
『 _CRT_SECURE_NO_WARNINGS 』を使うなどの対応が必要です。

※ 『 _CRT_SECURE_NO_WARNINGS 』については、このブログの《その60》に説明があります。


【 strcat関数 】

ヘッダ : #include <cstring>
形 式 : char* strcat(char* s1, const char* s2);
解 説 : s2 が指す文字列を、s1 が指す配列の末尾に連結する。
連結元と連結先が重なる場合の動作は定義されない。
返却値 : 連結後のs1

strcat関数は s1の容量を考慮しないようなので、注意が必要です。


【 strncat関数 】

ヘッダ : #include <cstring>
形 式 : char* strncat(char* s1, const char* s2, size_t n);
解 説 : s2 が指す文字列を、s1 が指す配列の末尾に連結する。
s2 の長さが n より長い場合は、切り捨てる。
連結元と連結先が重なる場合の動作は定義されない。
返却値 : 連結後のs1



新版明解C++入門編 p.314 演習8-10
 p.310 で学習した strcat関数および strncat関数と同等な関数を作成せよ。

『strcat関数と同等な関数』
 strcat関数と同等な関数の名前を strcat_eq とします。

// p314_演習8-10_strcat
#include <iostream>
using namespace std;

char* strcat_eq(char* s1, const char* s2)
{
char *p = s1;
while (*s1) // *s1 == '\0' になるまで s1++
s1++;
while (*s1++ = *s2++) // *s2 == '\0' になるまで *s1++ = *s2++
;
return p;
}

int main()
{
char str1[128] = "ABCDEF"; // ★ 十分な容量を確保
char str2[] = "abc";

cout << strcat_eq(str1, str2) << '\n';
}

b08_101.png



『strncat関数と同等な関数』
 strncat関数と同等な関数の名前を strncat_eq とします。

// p314_演習8-10_strncat
#include <iostream>
using namespace std;

char* strncat_eq(char* s1, const char* s2, size_t n)
{
char *p = s1;
while (*s1) // *s1 == '\0' になるまで s1++
s1++;
while (n--) { // n == 0 になるまで n--
if (!*s2) // *s2 == '\0' になったら break
break;
*s1++ = *s2++; // *s1 = *s2 の代入をしてから s1++; s2++;
}
*s1 = '\0'; // 終端に'\0'を追加
return p;
}


int main()
{
char str1[128] = "ABCDEF"; // ★ 十分な容量を確保
char str2[] = "#stuvwxyz";

strncat_eq(str1, str2, 5);
cout << str1 << '\n';

strncat_eq(str1, str2, 20);
cout << str1 << '\n';

strncat_eq(str1, str2, 1000);
cout << str1 << '\n';

}

b08_102.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6766648
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。