All pastes #1502067 Raw Edit

寄せ集め

public text v1 · immutable
#1502067 ·published 2009-07-21 14:26 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 5

int str_sort(const void *a, const void *b)
{
  return strcmp(*(char **)a, *(char **)b);
}

void *alloc_array(void *prev, size_t *sp, size_t use, size_t size)
{
  void *temp;
  
  temp = prev;
  if (prev) {
    if (use % (size * SIZE) == 0) {
      *sp += size * SIZE;
      temp = realloc(temp, *sp);
      memset(&((char *)temp)[*sp - (size * SIZE)], 0, size * SIZE);
    }
  }else{
    *sp = size * SIZE;
    temp = malloc(*sp);
    memset(temp, 0, *sp);
  }
  
  return temp;
}

int main(void)
{
  char temp[64];
  char gomi;
  char **word_list = NULL;
  size_t size;
  size_t use;
  int c;
  int i;
  
  c = -1;
  use = 0;
  while (1) {
    scanf("%[^\n]%c", temp, &gomi);
    if (strncmp("END", temp, 4) == 0) {
      break;
    }
    word_list = alloc_array(word_list, &size, use, sizeof(char *));
    c++;
    word_list[c] = malloc(sizeof(char) * 64);
    strncpy(word_list[c], temp, 64);
    use += sizeof(char *);
  }
  
  printf("Before: \n");
  for (i = 0; i <= c; i++) {
    printf("[%d] = %s\n", i, word_list[i]);
  }  
  qsort(word_list, c + 1, sizeof(char *), str_sort);
  printf("After: \n");
  for (i = 0; i <= c; i++) {
    printf("[%d] = %s\n", i, word_list[i]);
  }
  
  return 0;
}