C言語で、終了文字がない場合の対処方法
C言語では、文字列はnull終端文字(\0)で終了します。終端文字がなければ、文字列操作関数は文字列を正しく処理できません。解決策は次のとおりです。
- 文字列の末尾に手動でNULL終了文字を追加して、文字列を適切に終了させます。例:
char str[10] = "Hello"; // 缺少终止字符
str[5] = '\0'; // 手动添加终止字符
- 文字列を初期化する際は、そのまま文字列リテラルで初期化を行うと、コンパイラは自動的に末尾に null 終端文字を追加します。例:
char str[] = "Hello"; // 使用字符串初始化,编译器会自动添加终止字符
- 文字列操作関数を使用する: 文字列操作関数を使用すると、処理中に自動的に終端に文字を追加、検証をおこなうことができます。たとえば、
#include <string.h>
#include <stdlib.h>
char str[10] = "Hello"; // 缺少终止字符
// 使用 strncpy 函数将缺少终止字符的部分复制到另一个字符串中
char newStr[10];
strncpy(newStr, str, sizeof(newStr)-1); // 复制时限制大小,避免越界
newStr[sizeof(newStr)-1] = '\0'; // 手动添加终止字符
いずれの方法を用いる際も、配列の長さを確実に越えない文字列の長さとすることで、バッファオーバーフローを防ぐ。