Polmax Posted March 7, 2012 Report Share Posted March 7, 2012 Quais seriam as melhores funções predefinidas no header stdio.h para -> abrir um ficheiro de texto -> ler o que esta la dentro -> passar a string para um array -> depois de o array estar modificado guardar esse ficheiro com a string do array ? A string em C é um *char [tamanho da string] certo ? Eu ontem estive a testar o comando fopen e o fgets mas não percebo muito bem como funcionam. Alias o fopen percebi +- eu só tenho que indicar o nome do ficheiro e o que ele vai fazer ("teste.txt","ler ou escrever ou outra coisa qualquer") O fgets não percebi muito bem. Outra duvida que tenho é um stream é unicamente a ligação entre imput-output-erro ? Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 Ena tanta coisa ... 1) as funções não estão definidas nos headers; estão declaradas nos headers, isto é: os headers contêm os protótipos das funções. Os protótipos servem para o compilador poder saber como arranjar/converter os parametros e de que forma interpreta o valor de retorno. A definição é a parte de código que executa alguma coisa (que soma, que copia, que desenha, ...). 2) abrir um ficheiro de texto: fopen(). Nao te esqueças de o fechar com fclose(). 3) ler o conteúdo: fgets() 4) passar a string para um array: ??? uma string é um array de caracteres em que um desses caracteres tem o valor 0 (zero) 5) escrever dados num ficheiro: abri-lo (ver ponto 2) para escrita, fprintf() e fclose(). 6) C não tem o conceito de string como parte da linguagem. O que se faz é um array de caracteres e tem-se atenção para ter sempre um desses caracteres com o valor 0. Mas toda a gente, diz "string isto, string aquilo" e não há perigo de confusão 🙂 De qualquer maneira: um array não é um ponteiro, nem vice-versa. Uma string é um array. Em C muitos usos de ponteiros e arrays são iguais o que faz alguns programadores pensarem que arrays e ponteiros são a mesma coisa. O que tu escreveste A string em C é um *char [tamanho da string] tem as duas partes: array e ponteiro. Está mal: não deve ter *. A string em C é um char [tamanho da string + 1 para o zero] Outra coisa importante: as string literais (que aparecem no código) são arrays não modificaveis. Para fazer o que tu queres, o mais simples e directo é a) abrir o ficheiro para leitura em modo texto b) lê-lo todo c) fechar o ficheiro d) alterar os dados e) abrir o ficheiro para escrita, em modo texto f) escrever os dados g) fechar o ficheiro Não te esqueças da verificação de erros! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
brunoais Posted March 7, 2012 Report Share Posted March 7, 2012 Depende do objetivo mas... 1. fopen() 2. fscanf() fgets() 3. ? 4. fprintf() Sim. Tens um file pointer (File*). Não é suposto saberes o que contem, é só usares isso nas várias funções de input/output exclusivamente para identificação da stream que queres usar. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
pmg Posted March 7, 2012 Report Share Posted March 7, 2012 ...um stream é unicamente a ligação entre imput-output-erro ? Tens dois tipos de streams: streams de input e streams de output (e, para complicar, streams de input/output). Um stream de input é "uma fonte de dados". Um stream de output é "um destino para dados". O stdio foi criado para abstrair o conceito de ficheiros. Com certeza já ouviste dizer "em Unix tudo é um ficheiro" ... o equivalente em C é "tudo é (pode ser) um stream". Em C podes ter um stream ligado ao teclado, ou a um ficheiro do disco, ou a uma ligação de rede, ... O stdin, stdout, e stderr são simplesmente macros que expandem para streams (fluxos) predefinidos. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now