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;
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Notebook Novo. Aceita Duplo Boot? (2)
Não estou conseguindo habilitar os timezones (1)
verificar se uma fonte já esta instalada (30)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta