Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

jamesapp

macrumors 6502a
Original poster
Mar 7, 2008
544
0
james-collinss-macbook-pro:chap5 jamescollins$ gcc sorting.c -o sorting.out
Undefined symbols:
"_alloc", referenced from:
_readlines in cc0j5pcd.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

got the following output from terminal when i tried to compile a program from the
K and R book on c. the program is supposed to sort a list alphabetically.

here is the source file which i called sorting.c:

Code:
#include <stdio.h>
#include <string.h>

#define MAXLINES 5000 /* max #lines to be sorted */

char *lineptr[MAXLINES];  /* pointers to text lines */

int readlines(char *lineptr[], int nlines);
void writelines(char *lineptr[], int nlines);

void qsort(char *lineptr[], int left, int right);

/* sort input lines */
main()
{
  int nlines;  /* number of input lines read */
  
  if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {
     qsort(lineptr, 0, nlines-1);
     writelines(lineptr, nlines);
     return 0;
  } else {
     printf("error: input too big to sort\n");
     return 1;
  }
}

#define MAXLEN 1000  /* max length of any input line */
int getline(char *, int);
char *alloc(int);

/* readlines: read input lines */
int readlines(char *lineptr[], int maxlines)
{
  int len, nlines;
  char *p, line[MAXLEN];
  
  nlines = 0;
  while ((len = getline(line, MAXLEN)) > 0)
      if (nlines >= maxlines || (p = alloc(len)) == NULL)
          return -1;
      else {
          line[len-1] = '\0'; /* delete newline */
          strcpy(p, line);
          lineptr[nlines++] = p;
      }
  return nlines;
}

/* writelines: write ouput lines */
void writelines(char *lineptr[], int nlines)
{
  int i;
  
  for (i = 0; i < nlines; i++)
      printf("%s\n", lineptr[i]);
}

/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
  int c, i;
  
  for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
      s[i] = c;
  if (c == '\n') {
      s[i] = c;
      ++i;
   }
   s[i] = '\0';
   return i;
}

/* qsort: sort v[left]...v[right] into increasing order */
void qsort(char *v[], int left, int right)
{
  int i, last;
  void swap(char *v[], int i, int j);
  
  if (left >= right)  /* do nothing if array contains */
      return;  /* fewer than two elements */
  swap(v, left, (left + right)/2);
  last = left;
  for (i = left+1; i <= right; i++)
       if (strcmp(v[i], v[left]) < 0)
           swap(v, ++last, i);
  swap(v, left, last);
  qsort(v, left, last-1);
  qsort(v, last+1, right);
}

/* swap interchange v[i] and v[j] */
void swap(char *v[], int i, int j)
{
  char *temp;
  
  temp = v[i];
  v[i] = v[j];
  v[j] = temp;
}

any help would be appreciated.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.