ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

動的にメモリを確保したい その2

2010年06月07日 22時18分33秒 | ソフト開発日記
cygwinのインストールが無事終わり、前日のソースを実行したら
無事動きました。ただちゃんと確保できてるのかよくわからない。
そこで入力した文字列の長さ分だけメモリ確保するソースを書きました。
次のとおり。(日経ソフトウェアの付録参照)

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

char *strmemory(char *s){
  char *p;
  int len;

  len = strlen(s);
  p = malloc(len + 1);
  if(p == NULL){
    printf("確保失敗n");
    exit(1);
  }

  strcpy(p, s);
  return p;
}

main(){
  char buf[256], *str;

  printf("文字を入力して下さい。n");
  gets(buf);
  str = strmemory(buf);

  printf("bufのサイズは、%dバイトです。n", sizeof buf);
  printf("strのサイズは、%dバイトです。n", strlen(str));

  free(str);

}


【実行結果】
文字を入力して下さい。
Hello, World!!!!
bufのサイズは、256バイトです。
strのサイズは、16バイトです。


サイズ固定のbufは256バイト。
動的にメモリを確保したstrは、
入力した「Hello, World!!!!」に合わせて16バイト。
うまくいきました。