From: André C. <dig...@us...> - 2001-01-14 23:45:30
Attachments:
dptrs.c
|
[ Marcelo Beckmann escreveu: ] -> E ai pessoal, tudo blz, todo mundo firme ai na luta? Vamo levando Marcel=E3o, e a=ED, tudo blz ? -> heheh, espero que o ano tenha come=E7ado legal para todos. Pelo menos pr=E1 mim foi excelente ... :P -> Bem, voltei a pegar na programa=E7=E3o, e nossa, parece que tou -> enferrujado...=20 Xiiiiiii ... hehehehe foram os dias na praia, com certeza ... hehehehe -> S=E3o os malditos ponteiros novamente. ->=20 -> Vamos l=E1, imaginem isso: ->=20 -> int le_coisa(char **buffer) -> { -> essa fun=E7=E3o escreve em **buffer -> } ->=20 -> int main(int argc, char **argv)=20 -> { -> char caixa[8][255]; ->=20 -> ai =E9 que t=E1 o problema. Como =E9 que eu fa=E7o pra chamar a fun=E7= =E3o=20 -> le_coisa(), passando como argumento o vetor caixa? ->=20 -> o vetor caixa, no caso, servir=E1 para pegar os retornos dos ATIs do -> modem. ->=20 -> tipo, ja tentei: ->=20 -> le_coisa(caixa); -> le_coisa(&caixa); -> le_coisa(*caixa); ->=20 -> e d=E1 erro :( ->=20 -> j=E1 tentei tb declarar um ponteiro pra ponteiro em main, tipo: -> char **ptr; ->=20 -> e tentei atribui ptr =3D caixa, e chamar le_coisa() com ptr -> como argumento, tentei passar ptr, &ptr, ..., mas sempre d=E1 erro. ->=20 -> nossa, ser=E1 que eu enferrujei tanto assim? caramba ... ->=20 -> O pior =E9 que livro de base mesmo de C eu s=F3 tenho 1, e nele n=E3= o tem -> muita coisa assim sobre ponteiros pra ponteiros. -> Vou come=E7ar a pesquisar no material que baixei da net, pra ver se -> acho algo, mas se algu=E9m ai tiver uma dica pra agilizar a parada e= u -> agrade=E7o. Manow, no livro dos pais da crian=E7a t=E1 assim: "O C fornece vetores multidimensionais retangulares, embora na pr=E1tica eles sejam muito menos usados do que os vetores de apontadores (...)" E mais adiante: "Os iniciantes em C ficam =E0s vezes confusos com a diferen=E7a entre um vetor bidimensional e um vetor de apontadores, como o nome do exemplo anterior. Dadas as defini=E7=F5es: int a[10][20]; int *b[10]; ent=E3o a[3][4] e b[3][4] s=E3o sintaticamente refer=EAncias legais a um = =FAnico inteiro. Mas a =E9 um verdadeiro vetor bidimensional: 200 locais do tamanho de um inteiro foram separados, e o c=E1lculo convencional de subscrito retangular 20xlinha+col =E9 usado para encontrar o elemento a[linha.col]. Para b, no entanto, a defini=E7=E3o somente aloca 10 apontadores e n=E3o os inicializa; a instala=E7=E3o deve ser feita explicitamente, isto =E9, estaticamente ou com um c=F3digo. (...) " E agora o interessante: "A importante vantagem do vetor de apontadores =E9 que as linhas do vetor podem ser de tamanhos diferentes, isto =E9, cada elemento de b, n=E3o precisa apontar para um vetor de 20 elementos; alguns podem apontar para dois elementos, alguns para cinquenta, e alguns para nenhum sequer (...)" Bom, vc com certeza n=E3o =E9 "um iniciante em C", mas, concordo com o li= vro manow. O uso de um vetor de apontadores economizaria mem=F3ria. Repare: ATI0 - 5 ou 6 caracteres (velocidade do modem) ATI3 ou 4 - At=E9 uns 30 (no caso do PCtel mesmo, uma linha enorme ...) ATI0 - 2 caracteres (apenas um "Ok") Bom, se nota que os tamanhos das linhas n=E3o s=E3o padronizados ... ent=E3= o, seria um bug, tentar escrever num vetor de 20 caracteres uma string com 30 ou mais ... geraria um famoso SEGFAULT ... Escrevi o programinha abaixo (em anexo) para demonstrar o uso dos vetores de apontadores ... :) Ps: Vetores de apontadores s=E3o amplamente utilizados na atual interface (front-end) do LinuxCall ... e tb na vers=E3o em pure C ... -> Uma outra coisa: parece que o linuxcall n=E3o faz rediscagem -> autom=E1tica -> quando a conex=E3o cai, ou j=E1 faz? se n=E3o faz, que tal implement= ar -> isso, tipo, no setup do linuxcall o usuario pode configurar -> [X] rediscar automagicamente caso a conex=E3o caia -> [3] numero de tentativas de reconex=E3o para o caso anterior A id=E9ia =E9 =F3tima manow ... tb andei pensando em outras features ... voltadas para uso em servidores (isso mesmo ... :P) o LinuxCall J=C1 =E9 utilizado em v=E1rios servidores (pelo menos os que eu gerencio e que usa= m de conex=F5es discadas sim! :PPP). Mas isso =E9 papo pro futuro ... ;-) -> Uma outra feature que imaginei, seria a de poder programar um -> hor=E1rio -> de desconex=E3o. Tipo, o usu=E1rio poder agendar que em tais dias da -> semana, em tal horario, a conex=E3o deve ser cortada. Tipo, de -> segunda -> a sexta as 6 da manh=E3, corta a conex=E3o. Creio que isso pode ser -> implementado via cron, e como o configurador do linuxcall roda como -> root n=E3o haveria problemas em agendar a tarefa. Cara, parece que tu leu meus pensamentos ... hehehehe Tipow, eu uso o cron pr=E1 agendar conex=F5es com o LC, e tava pensando e= m escrever um m=F3dulo (mais um telinha de configura=E7=E3o pr=E1 interface= ) quando vc mandou esse mail ... coincid=EAncia, n=E3o ? :) -> Bom galera, por ora =E9 isso, um grande abra=E7o pra todos e int=E9 = o -> pr=F3ximo opcode. Falous galera, =E9 bom ver vcs voltando ao velho gaz ... :) Ps2: Segue uma c=F3pia deste mail pr=E1 lista do LinuxCall, j=E1 que o as= sunto n=E3o =E9 apenas programa=E7=E3o, mas tb id=E9ias para novas features no = programa ... Se algu=E9m quiser se inscrever na lista dos coders (voltada para a programa=E7=E3o), mande um mail pr=E1: lc-...@eg... []'s --- Andr=E9 Casteliano Analista de Sistemas +-=3D-=3D[ dig...@us...]=3D-=3D-+ [ Linux User: # 178853 Machine: # 79923 ] [ Linux Heavy User - Powered by Slackware 7.1 ] [ http://www.geocities.com/andre_casteliano/ ] +-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D= -=3D-=3D-=3D-=3D-+ [ LinuxCall - The Linux Dialer ] [ http://linuxcall.sourceforge.net ] +-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D= -=3D-=3D-=3D-=3D-+ |