上記のプログラムをコンパイルした際に警告メッセージが出ていないでしょうか?
gcc t.c
t.c: 関数 ‘main’ 内:
t.c:10:17: 警告: 関数 ‘calloc’ の暗黙的な宣言です [-Wimplicit-function-declaration]
n = (name *)calloc(2, sizeof(name));
^~~~~~
t.c:10:17: 警告: 組み込み関数 ‘calloc’ の互換性がない暗黙的な宣言です
t.c:10:17: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘calloc’
...
自分はgccでコンパイルしてみましたが、上のような警告メッセージが出ます。これはcalloc/freeなどの関数を利用する際に適切なヘッダーをincludeしていないという警告であり、関数のプロトタイプ宣言が行われないため引数や関数の結果の型を正しくコンパイルできていない可能性があるということを意味します。
正しくコンパイルするには警告メッセージに従ってヘッダーのincludeをしましょう。
C
1#include <stdio.h>
2#include <stdlib.h> // この行を追加
3...
プログラムを正しく動かすためにはエラーメッセージはもちろん、警告メッセージを1つも出ないようにしてください。
さて、コード自体にはヘッダーをincludeしていないこと以外には問題はないように見えます。自分の環境では(Windows10 64bit cygwin64 gcc)実際に動かしてみると次のようになります。
bash
1$ a.out
2abcd <-- 入力
3abcd <-- 出力
4$
ひょっとしたら次のように入力していないでしょうか?
bash
1$ a.out
2ab <-- 入力1行目
3cd <-- 入力2行目
もしそうしているなら「改行文字も1文字として読み込まれる」ので期待とは違う出力になります。
質問の際には「どういう入力を与えて、期待する出力が何で、結果はどうだったか」を明確に書きましょう。それを明記せずに「うまくいかない」とだけ書いても原因がはっきりわからないことも多いです。プログラミングに関するQ&Aでは特に「なるべく省略せずに明確に事実を述べる」とスムーズにコミュニケーションできると思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。