teaching machines

CS 330 Lecture 14 – Postfix Calculator and Make

February 22, 2013 by . Filed under cs330, lectures, spring 2013.

Agenda

TODO

Program This

Write a function strappend, which

Code

strappend.c

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

void strappend(char **base, const char *suffix) {
  int total_chars = strlen(*base) + strlen(suffix) + 1;
  char *bigger = (char *) malloc(total_chars * sizeof(char));
  
  strcpy(bigger, *base);
  strcat(bigger, suffix);
  printf("bigger: %s\n", bigger);

  free(*base);
  *base = bigger;
  printf("base: %s\n", *base);

  // Suffix is not necessarily on heap. It's not ours to reclaim.
  /* free(suffix); */

  // DON'T DO THIS, PAL! We're relying on you.
  /* free(bigger); */
}

int main(int argc, char **argv) {

  char *foo = strdup("Angry Beyonce"); 
  strappend(&foo, " a ring");
  printf("foo: %s\n", foo);

  free(foo);

  return 0;
}

stack.c

#define EZMALLOC(type, n) \
  (type *) malloc((n) * sizeof(type))

stack_t *make_stack(int capacity) {
  stack_t *stack = EZMALLOC(stack_t, 1);  
  stack->size = 0;
  stack->capacity = capacity;
  stack->items = EZMALLOC(int, stack->capacity);
}

void stack_push(stack_t *stack, int item) {
  if (stack->size >= stack->capacity) {
    fprintf(stderr, "Stack full, you foo bag.\n");
    exit(1);
  }

  stack->items[stack->size] = item;
  ++stack->size;
}

int stack_pop(stack_t *stack) {
  if (stack->size == 0) {
    fprintf(stderr, "Stack empty, you foo bag.\n");
    exit(1);
  }

  int item = stack->items[stack->size - 1];
  --stack->size;
  return item;
}

stack.h

#ifndef STACK_H
#define STACK_H

struct stack_t {
  int size;
  int capacity;
  int *items;
};

typedef struct stack_t stack_t;

stack_t *make_stack(int capacity);
void stack_push(stack_t *stack, int item);
int stack_pop(stack_t *stack);

#endif

stack_user.c

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

#include "stack.h"

int main(int argc, char **argv) {

  stack_t *stack = make_stack(10);

  stack_push(stack, 42);
  printf("stack_pop(stack): %d\n", stack_pop(stack));

  return 0;
}

Haiku

Languages have warts
Some of us are monsters — “Blarp!”
That’s Monster for “Like”