
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;
}
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalar Dual Boot, Linux+Windows. (5)
Conky, alerta de temperatura alta (16)
De volta para o futuro - ou melhor, para o presente (parte 2) (3)









