Escolar Documentos
Profissional Documentos
Cultura Documentos
Strings e Arquivos
Agenda
1 Strings
3 Arquivos Textos
4 Arquivos Binários
Strings
Strings
A linguagem C, ao contrário de outras linguagens de
programação, não possui um tipo de dados
correspondente às strings; no lugar, usam-se vetores
Em C, strings são vetores de caracteres terminados pelo
caractere nulo (’\0’). Por exemplo:
Strings
A linguagem C, ao contrário de outras linguagens de
programação, não possui um tipo de dados
correspondente às strings; no lugar, usam-se vetores
Em C, strings são vetores de caracteres terminados pelo
caractere nulo (’\0’). Por exemplo:
Strings
Strings
Strings - strlen
Strings - strcpy
Strings - strcat
strcat concatena duas strings, adicionando o conteúdo da
segunda ao final da primeira, além do terminador (\0).
Note que a primeira string deve ter espaço suficiente para
conter a segunda, para que não ocorra um "estouro de
buffer ".
Por exemplo:
Strings - strcmp
Se você tentar criar duas strings com o mesmo conteúdo e
compará-las como faria como números, verá que elas “não
são iguais”.
Isso ocorre porque, na verdade, o que está sendo
comparado são os endereços de memória onde estão
guardadas as strings.
Para comparar o conteúdo de duas strings, você deve usar
a função strcmp (ou suas variantes):
O valor de retorno é:
menor que zero se s1 for menor que s2;
igual a zero se s1 e s2 são iguais;
maior que zero se s1 for maior que s2.
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
Strings - strcmp
Strings - stricmp
A variante mais usada de strcmp é:
stricmp - compara duas strings sem distinção entre
maiúsculas e minúsculas. A sintaxe é igual à de strcmp.
Essa função não faz parte da biblioteca padrão, mas é
comumente encontrada como extensão particular de várias
delas.
Strings - sprintf
Strings - sprintf
1 #include <stdio.h>
2 #include <string.h>
3 int main() {
4 char var[256];
5 char sobrenome[] = "Simpson";
6 char nome[] = "Homer";
7
8 int idade = 30;
9
10 sprintf(var, "%s %s tem %d anos",sobrenome, nome
, idade);
11
12 printf ("Resultado : %s\n", var);
13
14 return 0;
15 }
Arquivos em C
Existem dois tipos possíveis de acesso a arquivos na linguagem C:
sequencial (lendo um registro após o outro) e aleatório
(posicionando-se diretamente num determinado registro)
Os arquivos em C são denominados fluxos (STREAM)
Um STREAM é associado a um arquivo por uma operação de abertura
do arquivo e, a partir da associação, todas as demais operações de
escrita e leitura podem ser realizadas
Na manipulação de um arquivo, há basicamente três etapas que
precisam ser realizadas:
1 abrir o arquivo;
2 ler e/ou gravar os dados desejados;
3 fechar o arquivo.
Em C, todas as operações realizadas com arquivos envolvem seu
identificador de fluxo, que é uma variável do tipo FILE *. Para
declarar um identificador de fluxo, faça como se fosse uma variável
normal:
Modo Significado
Ao terminar de usar um arquivo, você deve fechá-lo. Isso é feito pela função
fclose():
1 #include <stdio.h>
2
3 int main(){
4
5 FILE *arquivo;
6
7 arquivo = fopen ("README.txt", "w");
8
9 if (arquivo == NULL) {
10 printf ("Houve um erro ao abrir o arquivo.\n");
11 return 1;
12 }
13 printf ("Arquivo README criado com sucesso.\n");
14
15 fclose (arquivo);
16 return 0;
17 }
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
Escrevendo em arquivos
fputc
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fp;
5 char string[100];
6 int i;
7 // abre arquivo ASCII, para escrita
8 fp = fopen("arquivo.txt","w");
9 if(!fp){
10 printf( "Erro na abertura do arquivo"); exit(0);
11 }
12 printf("Entre com a string a ser gravada no arquivo:");
13 gets(string);
14 //Grava a string, caractere a caractere
15 for(i=0; string[i]; i++)
16 putc(string[i], fp);
17 // fecha o arquivo
18 fclose(fp);
19 return 0;
20 }
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
fputs
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fp;
5 char string[100];
6 // abre arquivo ASCII, para escrita
7 fp = fopen("arquivo.txt","w");
8 if(!fp){
9 printf( "Erro na abertura do arquivo"); exit(0);
10 }
11 printf("Entre com a string a ser gravada no arquivo:");
12 gets(string);
13 //Grava a string, caractere a caractere
14 fputs(string, fp);
15 // fecha o arquivo
16 fclose(fp);
17 return 0;
18 }
fprintf
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fp;
5 char primeiro_nome[100],ultimo_nome[100];
6 // abre arquivo ASCII, para escrita
7 fp = fopen("arquivo.txt","w");
8 if(!fp){
9 printf( "Erro na abertura do arquivo"); exit(0);
10 }
11 printf("Digite seu primeiro nome: ");
12 gets(primeiro_nome);
13 printf("Digite seu ultimo nome: ");
14 gets(ultimo_nome);
15 //Grava a string, caractere a caractere
16 fprintf(fp, "%s, %s",ultimo_nome,primeiro_nome);
17 // fecha o arquivo
18 fclose(fp);
19 return 0;
20 }
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
Lendo de arquivos
fgetc
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fl;
5 int c;
6
7 if((fl = fopen("arquivo.txt", "r")) == NULL){
8 perror("Erro: fopen");
9 exit(EXIT_FAILURE);
10 }
11
12 while((c = fgetc(fl)) != EOF)
13 printf("Caractere lido: %c\n", c);
14
15 if((c == EOF) && (feof(fl) == 0) && (ferror(fl) != 0))
16 perror("Erro: fgetc");
17
18 fclose(fl);
19 return EXIT_SUCCESS;
20 }
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
fgets
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fp;
5 char string[100];
6 // abre arquivo ASCII, para leitura
7 fp = fopen("arquivo.txt","r");
8 if(!fp){
9 printf( "Erro na abertura do arquivo"); exit(0);
10 }
11 // le dados do arquivo
12 fgets(string, 100, fp);
13 // imprimi os dados lidos
14 printf("%s\n", string);
15 // fecha o arquivo
16 fclose(fp);
17 return 0;
18 }
fscanf
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *fp;
5 char string[100];
6 // abre arquivo ASCII, para leitura
7 fp = fopen("arquivo.txt","r");
8 if(!fp){
9 printf( "Erro na abertura do arquivo"); exit(0);
10 }
11 // le e imprimi os dados do arquivo
12 while (!feof(fp)){
13 fscanf(fp,"%s",&string);
14 printf("String: %s\n",string);
15 }
16 // fecha o arquivo
17 fclose(fp);
18 return 0;
19 }
Prof. Kleber Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
1 struct CLIENTE{
2 int codigo;
3 char nome[100];
4 char endereco[100];
5 char telefone[14];
6 };
7
8 struct CLIENTE clientes[10] = {
9 1, "Cliente 1", "Endereco 1", "(01)0000-0000",
10 2, "Cliente 2", "Endereco 2", "(02)0000-0000",
11 3, "Cliente 3", "Endereco 3", "(03)0000-0000",
12 4, "Cliente 4", "Endereco 4", "(04)0000-0000",
13 5, "Cliente 5", "Endereco 5", "(05)0000-0000",
14 6, "Cliente 6", "Endereco 6", "(06)0000-0000",
15 7, "Cliente 7", "Endereco 7", "(07)0000-0000",
16 8, "Cliente 8", "Endereco 8", "(08)0000-0000",
17 9, "Cliente 9", "Endereco 9", "(09)0000-0000",
18 10, "Cliente 10", "Endereco 10", "(10)0000-0000"};
Escrevendo em arquivos
fwrite
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *pf;
5 float pi = 3.1415;
6 //Abre arquivo binario para escrita
7 if((pf = fopen("arquivo.bin", "wb")) == NULL) {
8 printf("Erro na abertura do arquivo");
9 exit(1);
10 }
11 // Escreve a variavel pi
12 if(fwrite(&pi, sizeof(float), 1,pf) != 1)
13 printf("Erro na escrita do arquivo");
14 // Fecha o arquivo
15 fclose(pf);
16 return 0;
17 }
Lendo de arquivos
fread
Exemplo
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(){
4 FILE *pf;
5 float pi = 3.1415;
6 //Abre arquivo binario para escrita
7 if((pf = fopen("arquivo.bin", "wb")) == NULL) {
8 printf("Erro na abertura do arquivo");
9 exit(1);
10 }
11 // Escreve a variavel pi
12 if(fwrite(&pi, sizeof(float), 1,pf) != 1)
13 printf("Erro na escrita do arquivo");
14 // Fecha o arquivo
15 fclose(pf);
16
17 // Abre o arquivo novamente para leitura
18 if((pf = fopen("arquivo.bin", "rb")) == NULL){
19 printf("Erro na abertura do arquivo");
20 exit(1);
21 }
22 // Le em pilido o valor da variavel armazenada anteriormente
23 if(fread(&pilido, sizeof(float), 1,pf) != 1)
24 printf("Erro na leitura do arquivo");
25 printf("\nO valor de PI, lido do arquivo e’: %f", pilido);
26 fclose(pf);
27 return 0;
Prof.
28 Kleber
} Jacques F. de Souza | klebersouza@pucminas.br Algoritmos e Estrutura de Dados II
Strings Funções da biblioteca padrão Arquivos Textos Arquivos Binários
1 struct CLIENTE{
2 int codigo;
3 char nome[100];
4 char endereco[100];
5 char telefone[14];
6 };
7
8 struct CLIENTE clientes[10] = {
9 1, "Cliente 1", "Endereco 1", "(01)0000-0000",
10 2, "Cliente 2", "Endereco 2", "(02)0000-0000",
11 3, "Cliente 3", "Endereco 3", "(03)0000-0000",
12 4, "Cliente 4", "Endereco 4", "(04)0000-0000",
13 5, "Cliente 5", "Endereco 5", "(05)0000-0000",
14 6, "Cliente 6", "Endereco 6", "(06)0000-0000",
15 7, "Cliente 7", "Endereco 7", "(07)0000-0000",
16 8, "Cliente 8", "Endereco 8", "(08)0000-0000",
17 9, "Cliente 9", "Endereco 9", "(09)0000-0000",
18 10, "Cliente 10", "Endereco 10", "(10)0000-0000"};
Dúvidas?