A stack buffer can hold a small generated string when the program writes a terminator.

capacity The buffer has room for data characters plus the terminating zero byte.
terminator Writing `'\0'` turns the filled characters into a C string.

Stack Buffer

limit
stack_buffer.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int main(void) {
    int limit = 3;
    char buffer[6] = {0, 0, 0, 0, 0, 0};

    for (int i = 0; i < limit; i++) {
        buffer[i] = (char)('A' + i);
    }
    buffer[limit] = '\0';

    printf("text=%s length=%d\n", buffer, limit);
    return 0;
}
#include <stdio.h>

int main(void) {
    int limit = 2;
    char buffer[6] = {0, 0, 0, 0, 0, 0};

    for (int i = 0; i < limit; i++) {
        buffer[i] = (char)('A' + i);
    }
    buffer[limit] = '\0';

    printf("text=%s length=%d\n", buffer, limit);
    return 0;
}
#include <stdio.h>

int main(void) {
    int limit = 5;
    char buffer[6] = {0, 0, 0, 0, 0, 0};

    for (int i = 0; i < limit; i++) {
        buffer[i] = (char)('A' + i);
    }
    buffer[limit] = '\0';

    printf("text=%s length=%d\n", buffer, limit);
    return 0;
}
  1. limit ← 3, buffer ← (empty)

    3int main(void) {4    int limit→ 3 = 3; //@limit=2, 55    char buffer→ (empty)[6] = {0, 0, 0, 0, 0, 0};
  2. buffer[i] ← A

    pass 1 of 3
    7for (int i0 = 0; i < limit3; i++) {8    buffer[i]→ A = (char)('A' + i0);9}
    All 3 passes — pass 1 is the card above
    passibuffer[i]
    10 A
    21 B
    32 C
  3. buffer[limit] = '\0';

    9    }10    buffer[limit] = '\0';1112    printf("text=%s length=%d\n", bufferABC, limit3);13    return 0;14}
    outputtext=ABC length=3
  1. limit ← 2, buffer ← (empty)

    3int main(void) {4    int limit→ 2 = 2;5    char buffer→ (empty)[6] = {0, 0, 0, 0, 0, 0};
  2. buffer[i] ← A

    pass 1 of 2
    7for (int i0 = 0; i < limit2; i++) {8    buffer[i]→ A = (char)('A' + i0);9}
  3. buffer[i] ← B

    pass 2 of 2
    7for (int i1 = 0; i < limit2; i++) {8    buffer[i]→ B = (char)('A' + i1);9}
  4. buffer[limit] = '\0';

    9    }10    buffer[limit] = '\0';1112    printf("text=%s length=%d\n", bufferAB, limit2);13    return 0;14}
    outputtext=AB length=2
  1. limit ← 5, buffer ← (empty)

    3int main(void) {4    int limit→ 5 = 5;5    char buffer→ (empty)[6] = {0, 0, 0, 0, 0, 0};
  2. buffer[i] ← A

    pass 1 of 5
    7for (int i0 = 0; i < limit5; i++) {8    buffer[i]→ A = (char)('A' + i0);9}
    All 5 passes — pass 1 is the card above
    passibuffer[i]
    10 A
    21 B
    32 C
    43 D
    54 E
  3. buffer[limit] = '\0';

    9    }10    buffer[limit] = '\0';1112    printf("text=%s length=%d\n", bufferABCDE, limit5);13    return 0;14}
    outputtext=ABCDE length=5