第03問

次のプログラムは、文字列の一部をコピーして次々に表示するものです。正常にコンパイルされ、実行すると期待通りの表示になりました。でも、問題点があります。

何が問題なのか分かりますか?
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
  char text[] = "Hello!";

  char *pPartOfText = 0;
  for (int i=0; i<strlen(text); i++) {
    pPartOfText = malloc(sizeof(text));
    if (pPartOfText) {
      strncpy(pPartOfText, text + i, sizeof(text));
      printf("%d: %s\n", i, pPartOfText);
    }
  }

  if (pPartOfText) {
    free(pPartOfText);
    pPartOfText = 0;
  }

  return EXIT_SUCCESS;
}
実行結果
0: Hello!
1: ello!
2: llo!
3: lo!
4: o!
5: !
ふむふむ、malloc()でメモリーを確保して、strncpy()で文字列の一部をコピーしてるんですね。
で、その動作をforループで繰り返したあと……
仕上げにfree()でメモリーを解放してますね!
malloc()free()が呼び出される回数を数えてみましょう。