読者です 読者をやめる 読者になる 読者になる

適当な文字列処理を行ってから末端でナル文字処理するのが気持ち悪い

最初から全部のメモリをナル文字で埋めて初期化しておけばいい!(名案!)(適当)

#include <stdio.h>
#include <string.h>

#define NUM 6

int main()
{
    int i;
    char text[NUM] = "Hello";

    for ( i = 0; i < NUM; ++i )
        if ( '\0' == text[i] )
            printf("text[%d]に'\\0'を発見しました.\n", i);

/*
    strcpy(text, "");
    printf("strcpy(text, \"\");\n");
*/
    memset(text, '\0', sizeof(text));
    printf("memset(text, '\\0', sizeof(text));\n");

    for ( i = 0; i < NUM; ++i )
        if ( '\0' == text[i] )
            printf("text[%d]に'\\0'を発見しました.\n", i);

    return 0;
}


もう少し書く.
文字列まるごとを関数で処理するのではなく,一文字ずつ処理する場合のこと.
for ループの i, j の関係,strlen の値が異なる,その他諸々の事由によって文字列終端にナル文字を挿入しなければならない場合がある.
私的にぴこっと一文ぶら下がっているのは気持ち悪い.
そうであれば,最初からメモリいっぱいナル文字を詰めておくことで文字列終端は常にナル文字になる.(もちろんナル文字を含めた文字数以上のメモリがあることを前提としている.)

使用している関数は memset(buf, ch, n)
buf の最初から n 文字分だけ ch で埋める.

n byte ではないことに注意.
int型は(環境に依るが私の環境では)8byte であるが,これは一文字に相当する.
ひとつの型分が一文字,そのサイズは異なる.