📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「</source>」を「</syntaxhighlight>」に置換 |
細 文字列「source lang」を「syntaxhighlight lang」に置換 |
||
| 7行目: | 7行目: | ||
'''注意'''<br> | '''注意'''<br> | ||
memset関数は、文字列の終端'\0'を自動的に付加しないので、'\0'以外の文字で埋める場合は、文字列の最後に終端'\0'を付加する必要がある。<br> | memset関数は、文字列の終端'\0'を自動的に付加しないので、'\0'以外の文字で埋める場合は、文字列の最後に終端'\0'を付加する必要がある。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 35行目: | 35行目: | ||
strncpy関数は、第2引数が指す文字列から、第1引数が指す文字列に最大で第3引数の文字数分をコピーする関数である。<br> | strncpy関数は、第2引数が指す文字列から、第1引数が指す文字列に最大で第3引数の文字数分をコピーする関数である。<br> | ||
なお、第2引数が指す文字列の終端'\0'に続く文字はコピーされない。<br> | なお、第2引数が指す文字列の終端'\0'に続く文字はコピーされない。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 72行目: | 72行目: | ||
最も簡単な対策法としては、コピー後の文字列のn - 1番目の要素に'\0'をセットする方法がある。<br> | 最も簡単な対策法としては、コピー後の文字列のn - 1番目の要素に'\0'をセットする方法がある。<br> | ||
具体的には以下のように実装する。<br> | 具体的には以下のように実装する。<br> | ||
< | <syntaxhighlight lang="c"> | ||
strncpy(s1, s2, n); | strncpy(s1, s2, n); | ||
if (n > 0) | if (n > 0) | ||
| 87行目: | 87行目: | ||
strncat関数は、第2引数が指す文字列から最大で第3引数の文字数分の文字列を、第1引数が指す文字列の最後に付加する。<br> | strncat関数は、第2引数が指す文字列から最大で第3引数の文字数分の文字列を、第1引数が指す文字列の最後に付加する。<br> | ||
なお、文字列の終端'\0'は自動的に付加されるので、第3引数の値が第2引数のサイズよりも小さい場合でも、手動で'\0'を付加する必要はない。<br> | なお、文字列の終端'\0'は自動的に付加されるので、第3引数の値が第2引数のサイズよりも小さい場合でも、手動で'\0'を付加する必要はない。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 116行目: | 116行目: | ||
2回目以降の呼び出しは、第1引数にNULLを指定することで、前回分割された場所の次から分割を開始する。<br> | 2回目以降の呼び出しは、第1引数にNULLを指定することで、前回分割された場所の次から分割を開始する。<br> | ||
分割できる文字列がなくなると、strtok関数はNULLを返す。<br> | 分割できる文字列がなくなると、strtok関数はNULLを返す。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 157行目: | 157行目: | ||
# 手順 4 で探した位置から末尾まで文字列をコピーする | # 手順 4 で探した位置から末尾まで文字列をコピーする | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 215行目: | 215行目: | ||
# 文字列の先頭から順番に空白でない位置を探す | # 文字列の先頭から順番に空白でない位置を探す | ||
# 手順 1 で探した位置から末尾まで文字列をコピーする | # 手順 1 で探した位置から末尾まで文字列をコピーする | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 262行目: | 262行目: | ||
# 手順1で探した末尾から順に、空白でない位置を探す | # 手順1で探した末尾から順に、空白でない位置を探す | ||
# 手順2で探した位置 + 1 に終端の'\0'を付加する | # 手順2で探した位置 + 1 に終端の'\0'を付加する | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 312行目: | 312行目: | ||
C言語で文字列の長さを取得するには、string.hのstrlen関数を使用する。<br> | C言語で文字列の長さを取得するには、string.hのstrlen関数を使用する。<br> | ||
strlen関数は、第1引数が指す文字列の長さを取得する関数である。なお、文字列の長さに終端'\0'は含まない。<br> | strlen関数は、第1引数が指す文字列の長さを取得する関数である。なお、文字列の長さに終端'\0'は含まない。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 339行目: | 339行目: | ||
<br> | <br> | ||
strcmp関数とstrncmp関数は、比較する文字列が同じなら0、第1引数 > 第2引数なら正の整数、第1引数 < 第2引数なら負の整数を返す。<br> | strcmp関数とstrncmp関数は、比較する文字列が同じなら0、第1引数 > 第2引数なら正の整数、第1引数 < 第2引数なら負の整数を返す。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 378行目: | 378行目: | ||
実装方法としては,文字列を構成する文字を1文字ずつ大文字に変換して比較を行えばよい。<br> | 実装方法としては,文字列を構成する文字を1文字ずつ大文字に変換して比較を行えばよい。<br> | ||
なお、以下の例では文字を大文字に変換するためにctype.hのtoupper関数を使用している。<br> | なお、以下の例では文字を大文字に変換するためにctype.hのtoupper関数を使用している。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 478行目: | 478行目: | ||
strchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかったときにはNULLを返す。<br> | strchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかったときにはNULLを返す。<br> | ||
探し出した文字へのポインタから文字列の先頭アドレスを引くことで、指定した文字が最初に現れる位置を求めることができる。<br> | 探し出した文字へのポインタから文字列の先頭アドレスを引くことで、指定した文字が最初に現れる位置を求めることができる。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 512行目: | 512行目: | ||
strrchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかった場合はNULLを返す。<br> | strrchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかった場合はNULLを返す。<br> | ||
探し出した文字へのポインタから文字列の先頭アドレスを引くことで,指定した文字が最後に現れる位置を求めることができる。<br> | 探し出した文字へのポインタから文字列の先頭アドレスを引くことで,指定した文字が最後に現れる位置を求めることができる。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 545行目: | 545行目: | ||
実装方法としては、文字列を構成する文字と検索する文字を一端大文字に変換して、1文字ずつ比較を行えばよい。<br> | 実装方法としては、文字列を構成する文字と検索する文字を一端大文字に変換して、1文字ずつ比較を行えばよい。<br> | ||
以下の例では、文字を大文字に変換するためにctype.hのtoupper関数を使用する。<br> | 以下の例では、文字を大文字に変換するためにctype.hのtoupper関数を使用する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 604行目: | 604行目: | ||
<br> | <br> | ||
以下の例では、探し出した文字へのポインタから文字列の先頭アドレスを引くことで、指定した文字が最初に現れる位置を求めている。<br> | 以下の例では、探し出した文字へのポインタから文字列の先頭アドレスを引くことで、指定した文字が最初に現れる位置を求めている。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 636行目: | 636行目: | ||
strstr関数は、文字列が見つかった場合は探し出した文字列へのポインタを返し、文字列が見つからなかった場合はNULLを返す。<br> | strstr関数は、文字列が見つかった場合は探し出した文字列へのポインタを返し、文字列が見つからなかった場合はNULLを返す。<br> | ||
探し出した文字列へのポインタから検索対象の文字列の先頭アドレスを引くことで、指定した文字列が最初に現れる位置を求めることができる。<br> | 探し出した文字列へのポインタから検索対象の文字列の先頭アドレスを引くことで、指定した文字列が最初に現れる位置を求めることができる。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 672行目: | 672行目: | ||
sprintf関数とsnprintf関数は共に、第2引数が指す書式文字列はprintf関数と同様のフォーマットで指定する。<br> | sprintf関数とsnprintf関数は共に、第2引数が指す書式文字列はprintf関数と同様のフォーマットで指定する。<br> | ||
変換指定子に%dや%fを指定することで、数値から文字列に変換することができる。<br> | 変換指定子に%dや%fを指定することで、数値から文字列に変換することができる。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 700行目: | 700行目: | ||
文字列を構成するすべての文字に対して、toupper関数を適応させれば文字列中のすべての小文字を大文字に変換することができる。<br> | 文字列を構成するすべての文字に対して、toupper関数を適応させれば文字列中のすべての小文字を大文字に変換することができる。<br> | ||
具体的には以下のように実装する。<br> | 具体的には以下のように実装する。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| 746行目: | 746行目: | ||
文字列を構成するすべての文字に対して、tolower関数を適応させれば文字列中のすべての大文字を小文字に変換することができる。<br> | 文字列を構成するすべての文字に対して、tolower関数を適応させれば文字列中のすべての大文字を小文字に変換することができる。<br> | ||
具体的には以下のように実装する。<br> | 具体的には以下のように実装する。<br> | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||