C言語-文字列操作関数
2291 ワード
gets(char buffer[])標準入力から1行を読み出し、改行を取り除き、文字列の末尾に'0'文字を増やしてバッファに書き込む
成功するとbufferのアドレスが返され、エラーやファイルの最後に遭遇すると空のポインタが返され、stdioのNULLで表されます.
fgets(char buffer[],int num,FILE*f)指定ファイルfからnum-1文字を読み出し、改行は削除されず、末尾に'0'文字を追加してbufferに書き込む
scanf(const char*format[,argument])文字列を処理する場合、文字列を取得するのではなく単語を取得することに基づいて、文字列の末尾に'0'文字を追加し、幅を指定すると文字列の長さはN+1となり、文字列の読み取りを停止する理由は次のとおりです.
1.最初の空白以外の文字に遭遇しました
2.幅が指定されている場合は、指定された幅を読み込んでから読み取りを停止します
EOFまたは正常に読み込まれた変数を返します.
fscanf(FILE *stream, const char *format [, argument ])
scanfと戻る
文字列印刷はすべて'0'に遭遇したときに停止します
puts()は、gets()と相補的に文字列の末尾に「改行」を自動的に付けます.
fputs()は出力に自動的に改行文字を追加せず、fgets()と相補的である
printf()
fprintf()
strlen(const char*str)は文字長を取得し、文字列は'0'で終了し、'0'を計算しないでください.
strcpy,ctrcat,sprintf,getsはバッファオーバーフローを引き起こしやすく,元凶は変数長をチェックしないことである
gets(char*buffer)は標準入力からユーザーが入力したテキストの行を読み出します.EOF文字や改行文字に遭遇するまで、テキストの読み込みを停止しません.つまりgets()は境界チェックを実行しません.そのため、gets()を使用すると常にバッファが溢れ出す可能性があります.この関数を使用しないでください.安全ではありません.入力した文字の個数を制限しません.bufferを超えるとプログラムが失敗します.fgets()関数を使用して代替できます
次のコードは使用しないでください.
次のコードを使用します.
strcpy()はソース文字列をバッファにコピーし、コピーする文字の具体的な数を指定していません.コピー文字の数はソース文字列の数に直接依存します.ソース文字列がたまたまユーザーから入力され、サイズを特に制限していない場合は、大きなトラブルに陥る可能性があります.
1.宛先バッファのサイズが分かれば、明確なチェックを追加できます.
2.strncpy()関数の使用
strcpy, strcat, sprintf, scanf, sscanf, fscanf, vfscanf, vsprintf, vscanf, vsscanf, streadd, strecpy, strtrns,
成功するとbufferのアドレスが返され、エラーやファイルの最後に遭遇すると空のポインタが返され、stdioのNULLで表されます.
fgets(char buffer[],int num,FILE*f)指定ファイルfからnum-1文字を読み出し、改行は削除されず、末尾に'0'文字を追加してbufferに書き込む
scanf(const char*format[,argument])文字列を処理する場合、文字列を取得するのではなく単語を取得することに基づいて、文字列の末尾に'0'文字を追加し、幅を指定すると文字列の長さはN+1となり、文字列の読み取りを停止する理由は次のとおりです.
1.最初の空白以外の文字に遭遇しました
2.幅が指定されている場合は、指定された幅を読み込んでから読み取りを停止します
EOFまたは正常に読み込まれた変数を返します.
fscanf(FILE *stream, const char *format [, argument ])
scanfと戻る
文字列印刷はすべて'0'に遭遇したときに停止します
puts()は、gets()と相補的に文字列の末尾に「改行」を自動的に付けます.
fputs()は出力に自動的に改行文字を追加せず、fgets()と相補的である
printf()
fprintf()
strlen(const char*str)は文字長を取得し、文字列は'0'で終了し、'0'を計算しないでください.
strcpy,ctrcat,sprintf,getsはバッファオーバーフローを引き起こしやすく,元凶は変数長をチェックしないことである
gets(char*buffer)は標準入力からユーザーが入力したテキストの行を読み出します.EOF文字や改行文字に遭遇するまで、テキストの読み込みを停止しません.つまりgets()は境界チェックを実行しません.そのため、gets()を使用すると常にバッファが溢れ出す可能性があります.この関数を使用しないでください.安全ではありません.入力した文字の個数を制限しません.bufferを超えるとプログラムが失敗します.fgets()関数を使用して代替できます
次のコードは使用しないでください.
char buf[1024];
gets(buf);
次のコードを使用します.
char buf[BUFSIZE];
fgets(buf, BUFSIZE, stdin);
strcpy()はソース文字列をバッファにコピーし、コピーする文字の具体的な数を指定していません.コピー文字の数はソース文字列の数に直接依存します.ソース文字列がたまたまユーザーから入力され、サイズを特に制限していない場合は、大きなトラブルに陥る可能性があります.
1.宛先バッファのサイズが分かれば、明確なチェックを追加できます.
if (strlen(src) >= dst_size) {
/* Do something appropriate, such as throw an error. */
} else {
strcpy(dst, src);
}
2.strncpy()関数の使用
strcpy, strcat, sprintf, scanf, sscanf, fscanf, vfscanf, vsprintf, vscanf, vsscanf, streadd, strecpy, strtrns,