Codigo do livro :" C A linguagem de Programação Padrão Ansi : Dennis Ritchie" não funciona.

1. Codigo do livro :" C A linguagem de Programação Padrão Ansi : Dennis Ritchie" não funciona.

Igor de Andrade Junqueira
JunqueiraAndrade

(usa Ubuntu)

Enviado em 18/02/2016 - 16:25h

Olá pessoal, eu estudo a linguagem c pelo livro do Dennis Ritchie : C A linguagem de Programação Padrão Ansi. No capítulo 5 de Apontadores e vetores, na parte 5.6 : "Vetores de Apontador; Apontadores para apontadores", tem um código que eu não consigo compilar, a mensagem de erro é : "na função `lelinhas': Ex_pag_107.c:(.text+0x129): referência indefinida para `aloca' collect2: error: ld returned 1 exit status". Bom, o erro é nessa parte : "if(nlinhas >= maxlin || (p = aloca(tam)) == NULL)" na função "lelinhas".Eu não entendi a construção : "char *aloca(int);" aloca é um ponteiro de tipo char, mais eu não entendi o (int).
Na função original : "int lelinha(char *, int)", porque não têm os nomes das variáveis?(essa função foi modificada no código, acrescentando os nomes das variáveis)
O código :

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

# define MAXLIN 500

char *ptrlinha[MAXLIN]; // ponteiros para linhas de texto

int lelinhas(char *ptrlinha[], int nlinhas);
void imprlinhas(char *ptrlinha[], int nlinhas);

void qsort(char *v[], int esq, int dir);

int main(void){

int nlinhas;
if((nlinhas = lelinhas(ptrlinha,MAXLIN)) >= 0){

qsort(ptrlinha, 0, nlinhas - 1);
imprlinhas(ptrlinha, nlinhas);
return 0;
}else{

printf("Erro: entrada muito grande\n");
return 1;

}

}

# define TAMMAX 1000
int lelinha(char *s, int lim); // int lelinha(char *, int)
char *aloca(int); // ??


int lelinha(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;


}
int lelinhas(char *ptrlinha[], int maxlin){

int tam, nlinhas;
char *p, linha[TAMMAX];

nlinhas = 0;
while((tam = lelinha(linha, TAMMAX)) > 0 )
if(nlinhas >= maxlin || (p = aloca(tam)) == NULL)
return -1;
else{
linha[tam - 1] = '\0';
strcpy(p,linha);
ptrlinha[nlinhas++] = p;
}

return nlinhas;
}

void imprlinhas(char *ptrlinha[], int nlinhas){

int i;

for(i = 0; i < nlinhas; i++)
printf("%s\n",ptrlinha[i]);

}

void qsort(char *v[], int esq, int dir){

int i, ultimo;
void troca(char *v[], int i, int j);

if( esq >= dir)
return;

troca(v, esq, (esq + dir)/2);
ultimo = esq;

for( i = esq + 1; i <= dir; ++i)
if( v[i] < v[esq])
troca(v, ++ultimo, i);
troca(v, esq, ultimo);
qsort(v, esq, ultimo-1);
qsort(v, ultimo+1,dir);

}

void troca(char *v[], int i, int j){

char *temp;

temp = v[i];
v[i] = v[j];
v[j] = temp;

}





  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts