サブルーチンの例

宿題でよく間違えられていたサブルーチンについて、解答例を示します。

■ 文字列のコピー

str1 に str2 をコピーする。ここで、#define MAX 10 であり、char str1[MAX] と宣言されているものとする。
for( i = 0; i < MAX - 1 && str2[i] != '\0' ; i ++ ){
  str1[i] = str2[i];
}
str1[i] = '\0';

■ push

リストを使ったスタックでのpush操作では、新しく追加するノードが確保できたかどうかをチェックすること。ただし、list_make_node で確保できたかどうかを調べるならば、list_push では調べる必要はない。
void list_push(Node *root, int num){
  Node *p;
  p = list_make_node(num);
  if( p == NULL ){
    exit(-1); /* エラー終了 */
  }
  p->next = root->next;
  root->next = p;
}

■ pop

リストを使ったスタックでのpop操作では、free した領域を参照しないこと。
int list_pop(Node *root){
  Node *p;
  int ans;
  p = root->next
  if( p == NULL ){
    exit(-1); /* エラー終了 */
  }
  ans = p->val;
  root->next = p->next;
  free(p);
  return ans
}

(c) Masato TOKUHISA, 2003, June. 13