
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).
# 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;
}
O Journal no Linux para a guarda e consulta de logs do sistema
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Sway no Arch Linux: configuração Inicial sem enrolação
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Continuando meus tópicos anteriores (1)
Saída de loop após teste de if. (2)
Governo da França vai trocar Windows por Linux (9)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 [RESOLVIDO] (9)









