Escolar Documentos
Profissional Documentos
Cultura Documentos
Biblioteca Stdlib
Biblioteca Stdlib
h
Esta livraria é responsável pela inclusão de funções de caracter muito diverso:
alocação de memória, conversão ascii para inteiro e vice-versa, ascii para float,
números aleatórios, etc.
Dada a sua pouca utilização algumas destas funções não serão descritas em pormenor
neste guia. Os alunos interessados na sua descrição poderão consultar as ajudas do
Turbo C ou man do Gnu C.
53
abort #include <stdlib.h>, #include <process.h>
Termina anormalmente um programa.
void abort(void);
retorno:
argumentos:
Obs : Uma vez chamada a função abort( ) envia a seguinte mensagem para o stderr
(“Abnormal program termination”) e termina a execução do programa através da chamada da
função exit( ) com código de saída numero 3.
Exemplo
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Chamando)\n");
abort();
return 0; /* Esta instrução nunca é alcançada */
}
54
Exemplo
#include <stdio.h>
#include <math.h>
int main(void)
{
int number = -1234;
retorno: valor convertido em caso de sucesso. Ou erro no caso da string não poder ser
convertida 0.
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
55
atoi #include <stdlib.h>
Macro que converte uma string num valor inteiro .
retorno: valor convertido em caso de suc esso. Ou erro no caso da string não poder ser
convertida 0.
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n); /*a partir do 5 é truncado devido ao caracter “.” */
return 0;
}
retorno: valor convertido em caso de sucesso. Ou erro no caso da string não poder ser
convertida 0.
56
DOS UNIX WINDOWS ANSI C
Sim Sim Sim Sim
Ver também : atof, atoi, ecvt, fcvt, gcvt, scanf, strtod, strtol, strtoul.
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *lstr = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", lstr, l);
return(0);
}
argumentos:
base Primeiro endereço do vector
fcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementos
key Elemento a encontrar
nelem Numero de elemento no vector.
width Numero de bytes de cada elemento.
.
Obs : Efectua uma pesquisa binária do valor k e y no vector base de nelem elementos.
Exemplo
57
#include <stdlib.h>
#include <stdio.h>
int main(void){
if (lookup(512))
printf("512 is in the table.\n");
else
printf("512 isn't in the table.\n");
return 0;
}
retorno: ponteiro para o primeiro endereço do bloco de memória alocado em caso de erro (não
existir memória para alocar devolve um ponteiro NULL..
argumentos:
nitems número de elementos
size tamanho em bytes de cada elemento.
.
58
Obs : Calloc aloca só permite 64 K de memória, para se alocar mais, deve-se utilizar o
faralloc( ). No caso de se utilizar o MSDOS deve-se ter em conta o modelo de memória
utilizado SMALL ou LARGE.
Exemplo
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char str = NULL; / ponteeiro para NULL*/
/* mostra string */
printf("String is %s\n", str);
free(str);
return 0;
}
argumentos:
numer numerador
denom denominador.
59
.
Obs :
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
x = div(10,3);
printf("10 div 3 = %d e resta %d\n",
x.quot, x.rem);
return 0;
}
Obs :
Exemplo
60
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
char *string;
double value;
int dec, sign;
int ndig = 10;
clrscr();
value = 9.876;
string = ecvt(value, ndig, &dec, &sign);
printf("string = %s dec = %d sign = %d\n", string, dec, sign);
value = -123.45;
ndig= 15;
string = ecvt(value,ndig,&dec,&sign);
printf("string = %s dec = %d sign = %d\n", string, dec, sign);
return 0;
}
retorno:
argumentos:
status inteiro a ser devolvido ao processo que evocou o processo que termina, ou
ao sistema operativo.
Obs : Normalmente 0 indica a não ocorrência de erro e não zero a ocorrência de algum tipo de
erro (ver ajudas). Ao sair a função exit( ) fecha todos buffers, escreve o que estava em linha de
espera nos bufferes e evoca qualquer função declarada através de atexit( ).
61
Ver também : abort, atexit, _c_exit, _dos_keep, exec..., _exit, keep, signal, spawn.
Exemplo
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int main(void)
{
int status;
printf("Digite 1 ou 2\n");
status = getch();
/* Sets DOS errorlevel */
exit(status - '0');
retorno:
argumentos:
status inteiro a ser devolvido ao processo que evocou o processo que termina, ou
ao sistema operativo.
Obs : Normalmente 0 indica a não ocorrência de erro e não zero a ocorrência de algum tipo de
erro (ver ajudas). Ao sair a função _exit( ) não fecha ficheiros, buffers, nem escreve o que
estava em linha de espera nos bufferes, nem evoca qualquer função declarada através de
atexit( ).
Ver também : abort, atexit, _c_exit, _dos_keep, exec..., _exit, keep, signal, spawn.
Exemplo
#include <stdlib.h>
62
#include <stdio.h>
void done(void);
int main(void)
{
atexit(done);
_exit(0);
return 0;
}
void done()
{
printf("Olá \n");
}
Obs :
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *str;
double num;
int dec, sign, ndig = 5;
63
/* numero normal */
num = 9.876;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s parte decimal = %d sinal = %d\n", str, dec, sign);
/* numero negativo */
num = -123.45;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s parte decimal = %d sinal = %d\n", str, dec, sign);
/* anotação cientifica */
num = 0.678e5;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s parte decimal= %d sinal = %d\n", str, dec, sign);
return 0;
retorno:
argumentos:
block ponteiro para bloco de memória a libertar.
Obs : Atenção ao modelos de memória. Aconselha-se estudo mais profundo sobre a alocação
dinâmica de memória (mas antes não se esqueçam de estudar/rever os ponteiros) .
Exemplo
#include <string.h>
#include <stdio.h>
#include <alloc.h>
int main(void)
{
char *str;
64
/* aloca memória para string */
str = (char *) malloc(10);
/* mostra string */
printf("String is %s\n", str);
/* liberta memória */
free(str);
return 0;
}
argumentos:
value valor a converter
ndec numero de dígitos significativos a converter
buf ponteiro para string buf de armazenamento da conversão
Obs :
Exemplo
#include <stdlib.h>
#include <stdio.h>
65
int main(void)
{
char str[25];
double num;
int sig = 5; /* digitos significativos*/
/* numero real */
num = 9.876;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* real negativo */
num = -123.4567;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* anotação cientifica */
num = 0.678e5;
gcvt(num, sig, str);
printf("string = %s\n", str);
return(0);
}
argumentos:
name nome da variável de ambiente
Exemplo
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
66
int main(void)
{
char *path, *ptr;
int i = 0;
while (environ[i])
printf("%s\n",environ[i++]);
return 0;
}
argumentos:
value valor a converter
string ponteiro para buffer de string.
radix valor da base em que se considera o valor.
Obs : no caso de ser um valor negativo e o radix ser 10 itoa coloca um sinal de menos no inicio
da string.
Exemplo
#include <stdlib.h>
#include <stdio.h>
67
int main(void)
{
int number = 12345;
char string[25];
argumentos:
x valor inteiro longo
Obs : .
Ver também :
Exemplo
#include <stdio.h>
#include <math.h>
int main(void)
{
long result;
long x = -12345678L;
result= labs(x);
printf("number: %ld abs value: %ld\n", x, result);
return 0;
}
68
Efectua a divisão de longos (inteiros).
argumentos:
numero valor inteiro longo
denominador valor inteiro longo
Obs :
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
ldiv_t lx;
lx = ldiv(100000L, 30000L);
printf("100000 div 30000 = %ld com resto %ld\n", lx.quot, lx.rem);
return 0;
}
retorno: Null no caso de não encontrar o elemento e no caso de sucesso ponteiro para o
elemento.
argumentos:
ver bsearch, lsearch
Obs :
69
Ver também : bsearch, lsearch, qsort.
Exemplo
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int array[5] = {35, 87, 46, 99, 12};
size_t nelem = 5;
int key;
int *result;
key = 99;
result = (int *) lfind(&key, array, &nelem,
sizeof(int), (int(*)(const void *,const void *))compare);
if (result)
printf("Numero %d encontrado \n",key);
else
printf("Numero %d desconhecido \n",key);
return 0;
}
argumentos:
val long
count numero de bits a deslocar
70
Exemplo
#include <stdlib.h>
#include <stdio.h>
/* function prototypes */
int lrotl_example(void);
int lrotr_example(void);
/* lrotl example */
int lrotl_example(void)
{
unsigned long result;
unsigned long value = 100;
result = _lrotl(value,1);
printf("The value %lu rotated left one bit is: %lu\n", value, result);
return 0;
}
/* lrotr example */
int lrotr_example(void)
{
unsigned long result;
unsigned long value = 100;
result = _lrotr(value,1);
printf("The value %lu rotated right one bit is: %lu\n", value, result);
return 0;
}
int main(void)
{
lrotl_example();
lrotr_example();
return 0;
}
71
argumentos:
base Primeiro endereço do vector
fcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementos
key Elemento a encontrar
nelem Numero de elemento no vector.
width Numero de bytes de cada elemento.
.
Obs : Efectua uma pesquisa binária do valor k e y no vector base de nelem elementos, no caso
de não encontrar adiciona a chave ao vector.
Exemplo
#include <stdlib.h>
#include <stdio.h>
#include <string.h> /* para utilização da função strcmp */
int main(void)
{
int i;
char *key = "Purple";
if (addelem(key))
printf("%s já existe na tabela de cores\n", key);
else
{
strcpy(colors[ncolors-1],key);
72
printf("%s adicionada à tabela de cores\n", key);
}
retorno: ponteiro para variável string que receba valor convertido. Ou NULL em caso de erro.
argumentos:
value valor a converter
string ponteiro para buffer de string.
radix valor da base em que se considera o valor.
Obs : no caso de ser um valor negativo e o radix ser 10 itoa coloca um sinal de menos no inicio
da string.
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char string[25];
long value = 123456789L;
ltoa(value,string,10);
printf("numero = %ld string = %s\n", value, string);
return 0;
}
73
malloc #include <stdlib.h>
Efectua alocação de bloco de memória disponível no Heap.
retorno: ponteiro para inicio da área de memória reservada. Em caso de erro devolve ponteiro
NULL.
argumentos:
size tamanho do bloco de memória em bytes.
Ver também : alloca, allocmem, calloc, coreleft, farcalloc, farmalloc, free, realloc.
Exemplo
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
int main(void)
{
char *str;
/* mostra string */
printf("String is %s\n", str);
/* liberta memória */
free(str);
return 0;
}
74
max #include <stdlib.h>
Ver ajudas do Turbo C.
argumentos:
name string contendo as novas variáveis de ambiente.
Obs :
Exemplo
75
void qsort(void *base, size_t nelem,
size_t width, int (*fcmp )(const void *, const void *));
argumentos:
base Primeiro endereço do vector
fcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementos
key Elemento a encontrar
nelem Numero de elemento no vector.
width Numero de bytes de cada elemento.
Obs :
Ver também :
Exemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int x;
argumentos:
Obs : Devolve um numero pseudo aleatório entre 0 e MAX_RAND.
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
argumentos:
Obs : Devolve um numero pseudo aleatório entre 0 e num -1.
Exemplo
#include <stdlib.h>
77
#include <stdio.h>
#include <time.h>
void randomize(void);
retorno:
argumentos:
Obs : Utiliza uma função definida em time.h.
Exemplo
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
randomize();
printf("Dez numeros entre 0 e 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
78
*realloc(void *block, size_t size);
retorno: Ponteiro para o bloco de memória alocado. Em caso de erro devolve um ponteiro
NULL.
argumentos:
block ponteiro para o bloco de memória previamente alocado
size tamanho do novo bloco de memória
Obs : ajusta o bloco de memória ao novo tamanho size e copia o conteúdo para a nova posição
de memória..
Exemplo
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char *str;
/* Aloca 10 bytes */
str = (char *) malloc(10);
/* libertação da memória*/
free(str);
return 0;
}
79
_searchenv #include <stdlib.h >
Procura um ficheiro em determinado caminho de pesquisa path .
retorno:
argumentos:
seed numero inteiro que serve de semente para o gerador.
Ver também :
Exemplo
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Dez números aleatórios entre 0 e 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
80
double strtod(const char *s, char **endptr);
argumentos:
Obs
Exemplo
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char input[80], *endptr;
double value;
argumentos:
Obs :
Exemplo
81
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "87654321", *endptr;
long lnumber;
return 0;
}
argumentos:
Obs :
Exemplo
argumentos:
Obs :
82
DOS UNIX WINDOW S ANSI C
Sim Sim Sim
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "87654321", *endptr;
unsigned long lnumber;
return 0;
}
retorno:
argumentos:
from ponteiro para endereço de origem
to ponteiro para endereço de destino
nbytes numeros de bytes a trocar.
Obs : Optimo para manter trocar a ordem do bytes na conversão Little Indian / Big Indian (???)
Ver também :
Exemplo
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
swab(source, target, strlen(source));
printf("This is target: %s\n", target);
return 0;
}
argumentos:
command string com comando a executar
Obs : Optimo para manter trocar a ordem do bytes na conversão Little Indian / Big Indian (???)
Exemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("About to spawn command in terpreter and run a DOS command\n");
system("dir");
return 0;
}
retorno: ponteiro para variável string que receba valor convertido. Ou NULL em caso de erro.
84
argumentos:
value valor a converter
string ponteiro para buffer de string.
radix valor da base em que se considera o valor.
Obs : no caso de ser um valor negativo e o radix ser 10 itoa coloca um sinal de menos no inicio
da string.
Exemplo
#include <stdlib.h>
#include <stdio.h>
ultoa(lnumber,string,10);
printf("string = %s unsigned long = %lu\n",string,lnumber);
return 0;
}
85