5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 1/33
53
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.
Funções disponibilizadas por esta livraria:
abort abs atexitatof atoi atolbsearch calloc divecvt exit _exitfcvt free _fullpath
gcvt getenv itoalabs ldiv lfind_lrotl _lrotr lsearchltoa _makepath mallocmax mblen mbtowcmbstowcs min putenvqsort rand randomrandomize realloc _rotl_rotr _searchenv _splitpath
srand strtod strtol_strtold strtoul swabsystem ultoa wctombwcstombs
Dada a sua pouca utilização algumas destas funções não serão descritas em pormenorneste guia. Os alunos interessados na sua descrição poderão consultar as ajudas doTurbo C ou man do Gnu C.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 2/33
54
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 dafunção exit( ) com código de saída numero 3.
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : _exit, assert, atexit, exit, raise, ignal, pawn.
Exemplo
#include <stdio.h>#include <stdlib.h>
int main(void)
{printf("Chamando)\n");abort();return 0; /* Esta instrução nunca é alcançada */
}
abs #include <stdlib.h>, #include <math.h>
Determina o valor absoluto de um numero inteiro .
int abs(int a);
retorno: valor absoluto de a.
argumentos: inteiro sinalizado
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : fabs, labs, fabsl.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 3/33
55
Exemplo
#include <stdio.h>#include <math.h>
int main(void){
int number = -1234;
printf("número: %d valor absoluto: %d\n", number, abs(number));return 0;
}
atexit #include <stdlib.h>
Consultar ajuda do Turbo C ou man GNUC.
atof #include <stdlib.h>, #include <math.h>
Converte uma string num valor real (float) de precisão dupla .
double atof(const char *s);
retorno: valor convertido em caso de sucesso. Ou erro no caso da string não poder serconvertida 0.
argumentos: ponteiro para string.
Obs : O primeiro caracter não conversível interrompe a conversão.
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : atoi, atol, ecvt, fcvt, gcvt, scanf, strtod.
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;}
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 4/33
56
atoi #include <stdlib.h>
Macro que converte uma string num valor inteiro .
int atoi(const char *s);
retorno: valor convertido em caso de sucesso. Ou erro no caso da string não poder serconvertida 0.
argumentos: ponteiro para string.
Obs : O primeiro caracter não conversível interrompe a conversão. È necessário cuidado nassituações de overflow.
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : atof, atol, ecvt, fcvt, gcvt, scanf, strtod.
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;
}
atol #include <stdlib.h>
Macro que converte uma string num valor inteiro longo.
long int atoi(const char *s);
retorno: valor convertido em caso de sucesso. Ou erro no caso da string não poder serconvertida 0.
argumentos: ponteiro para string.
Obs : O primeiro caracter não conversível interrompe a conversão. È necessário cuidado nassituações de overflow.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 5/33
57
DOS UNIX WINDOWS ANSI CSim 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);
}
bsearch #include <stdlib.h>
Função que realiza pesquisa binária.
void *bsearch(const void *key, const void *base, size_t nelem,size_t width, int (*fcmp)(const void*, const void*));
retorno: ponteiro para o primeiro elemento encontrado e 0 no caso de erro.
argumentos:base Primeiro endereço do vectorfcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementoskey Elemento a encontrarnelem Numero de elemento no vector.
width Numero de bytes de cada elemento..
Obs : Efectua uma pesquisa binária do valor key no vector base de nelem elementos.
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : lsearch, lfind.
Exemplo
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 6/33
58
#include <stdlib.h>#include <stdio.h>
typedef int (*fptr)(const void*, const void*);
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
/* complicado ?? mande-me um mail [email protected] */
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2){return(*p1 - *p2);
}
#pragma argsused /* directiva para compilação */
int lookup(int key){int *itemptr;
/* The cast of (int(*)(const void *,const void*))is needed to avoid a type mismatch error atcompile time */
itemptr = (in t *) bsearch (&key, numarray, NELEMS(numarray),sizeof(int), (fptr)numeric);
return (itemptr != NULL);}
int main(void){
if (lookup(512))printf("512 is in the table.\n");
elseprintf("512 isn't in the table.\n");
return 0;}
calloc #include <stdlib.h>, #include<alloc.h>
Aloca dinamicamente blocos de memória, no heap, para utilização no programa.
void *calloc(size_t nitems, size_t size);
retorno: ponteiro para o primeiro endereço do bloco de memória alocado em caso de erro (nãoexistir memória para alocar devolve um ponteiro NULL..
argumentos:nitems número de elementos
size tamanho em bytes de cada elemento..
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 7/33
59
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óriautilizado SMALL ou LARGE.
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : free, malloc, realloc, faralloc.
Exemplo
#include <stdio.h>#include <alloc.h>#include <string.h>
int main(void){
char str = NULL; / ponteeiro para NULL*/
/* aloca memória para a string */ str = (char *) calloc(10, sizeof(char));
/* copia "Hello" em string */ strcpy(str, "Hello");
/* mostra string */ printf("String is %s\n", str);
/* liberta memoria É SEMPRE CONVENIENTE EFECTAR A LIBERTAÇÂO */
free(str);
/* neste ponto para onde aponta str ??? */
return 0;}
div #include <stdlib.h>
Divide dois valores inteiros.
div_t div(int numer, int denom);
retorno: estrutura com o valor do quociente e do resto.
argumentos:numer numeradordenom denominador.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 8/33
60
.
Obs :
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : ldiv.
Exemplo
#include <stdlib.h>#include <stdio.h>
div_t x; /* aconselho a ver o tipo de estrutura na ajuda do Turbo C */
int main(void){
x = div(10,3);printf("10 div 3 = %d e resta %d\n",x.quot, x.rem);
return 0;}
ecvt #include <stdlib.h>Converte um float numa string.
char *ecvt(double value, int ndig, int *dec, int *sign);
retorno: parte inteira convertida em string.argumentos:
value valor a converter.ndig numero de digitos
dec devolução parte decimalsign devolução do sinal “-/+” de value.
Obs :
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : gcvt, fcvt.
Exemplo
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 9/33
61
#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);
value = 0.6789e5; /* anotação cientifica */ ndig = 5;string = ecvt(value,ndig,&dec,&sign);printf("string = %s dec = %d sign = %d\n", string, dec, sign);
return 0;}
exit #include <stdlib.h>, #include <process.h>
Permite o abandono do processo, programa onde é evocado.
void exit( int status);
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 deerro (ver ajudas). Ao sair a função exit( ) fecha todos buffers, escreve o que estava em linha deespera nos bufferes e evoca qualquer função declarada através de atexit( ).
DOS UNIX WINDOWS ANSI C
Sim Sim
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 10/33
62
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');
/* Nota: esta linha nunca ha-de ser atingida */ return 0;
}
_exit #include <stdlib.h>
Permite o abandono do processo, programa onde é evocado.
void _exit( int status);
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 deerro (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 deatexit( ).
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : abort, atexit, _c_exit, _dos_keep, exec..., _exit, keep, signal, spawn.
Exemplo
#include <stdlib.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 11/33
63
#include <stdio.h>
void done(void);
int main(void)
{
atexit(done);_exit(0);return 0;
}
void done(){
printf("Olá \n");}
fcvt #include <stdlib.h>
Converte um float numa string. A diferença entre a função ecvt( ) e esta está no modo em comoé efectuado o arredondamento da parte decimal para o numero de dígitos pretendidos.
char *fcvt(double value, int ndig, int *dec, int *sign);
retorno: parte inteira convertida em string.argumentos:
value valor a converter.ndig numero de digitosdec devolução parte decimalsign devolução do sinal “-/+” de value.
Obs :
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : gcvt, fcvt.
Exemplo#include <stdlib.h>#include <stdio.h>
int main(void){
char *str;
double num;int dec, sign, ndig = 5;
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 12/33
64
/* 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;
}
free #include <stdlib.h>, #include<alloc.h>
Liberta a memória alocada pelas funções calloc( ), malloc( ) ou realloc( ).
void free(void *block);
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çãodinâmica de memória (mas antes não se esqueçam de estudar/rever os ponteiros) .
DOS UNIX WINDOWS ANSI C
Sim Sim
Ver também : calloc, farcalloc, farmalloc, freemem, malloc, realloc, strdup.
Exemplo
#include <string.h>#include <stdio.h>#include <alloc.h>
int main(void){
char *str;
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 13/33
65
/* aloca memória para string */ str = (char *) malloc(10);
/* copia "Hello" para a string */ strcpy(str, "Hello");
/* mostra string */ printf("String is %s\n", str);
/* liberta memória */ free(str);
return 0;}
_fullpath #include <stdlib.h>
Converte o caminho (path) relativo em caminho absoluto.
Ver ajudas do Turbo C
DOS UNIX WINDOWS ANSI CSim
gcvt #include <stdlib.h>, #include<alloc.h>
Converte real numa string.
char *gcvt(double value, int ndec, char *buf);
retorno: ponteiro para string convertida
argumentos:value valor a converterndec numero de dígitos significativos a converterbuf ponteiro para string buf de armazenamento da conversão
Obs :
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : ecvt, fcvt, sprintf.
Exemplo
#include <stdlib.h>#include <stdio.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 14/33
66
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);}
getenv #include <stdlib.h>
Obtém o valor de determinada variável de ambiente.
char *getenv(const char *name);
retorno: valor da variável de ambiente. No caso de erro ponteiro NULL.
argumentos:name nome da variável de ambiente
Obs : O nome da variável de ambiente pode ser em maiúsculas ou minúsculas.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : putenv, environ, getpsp.
Exemplo
#include <stdio.h>
#include <stdlib.h>#include <alloc.h>#include <string.h>#include <dos.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 15/33
67
int main(void){
char *path, *ptr;int i = 0;
/* obtem o path corrente */ ptr = getenv("PATH");
/* estabelece um novo path */ path = (char *) malloc(strlen(ptr)+15);strcpy(path,"PATH=");strcat(path,ptr);strcat(path,";c:\\temp");
/* substitui o path corrente e mostra as variáveis de ambiente */
putenv(path);
while (environ[i])printf("%s\n",environ[i++]);
return 0;}
itoa #include <stdlib.h>
Converte um valor inteiro em string.
char *itoa(int value, char *string, int radix);
retorno: ponteiro para variável string que receba valor convertido.
argumentos:value valor a converterstring 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 inicioda string.
DOS UNIX WINDOWS ANSI CSim
Ver também : ltoa, ultoa.
Exemplo
#include <stdlib.h>#include <stdio.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 16/33
68
int main(void){
int number = 12345;char string[25];
itoa(number, string, 10);printf("inteiro = %d string = %s\n", number, string);return 0;
}
labs #include <stdlib.h>
Calcula o valor absoluto de um inteiro longo.
long int labs(long int x);
retorno: valor absoluto.
argumentos:x valor inteiro longo
Obs : .
DOS UNIX WINDOWS ANSI C
Sim Sim Sim
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;}
ldiv #include <stdlib.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 17/33
69
Efectua a divisão de longos (inteiros).
ldiv_t ldiv(long int numero, long int denominador);
retorno: estrutura com o quociente e resto da divisão.
argumentos:numero valor inteiro longodenominador valor inteiro longo
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : div.
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;
}
lfind #include <stdlib.h>
Efectua uma pesquisa linear sobre um vector.
void *lfind(const void *key, const void *base, size_t *num,size_t width, int (*fcmp)(const void *, const void*));
retorno: Null no caso de não encontrar o elemento e no caso de sucesso ponteiro para oelemento.
argumentos:ver bsearch, lsearch
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 18/33
70
Ver também : bsearch, lsearch, qsort.
Exemplo
#include <stdio.h>#include <stdlib.h>
int compare(int *x, int *y){
return( *x - *y );}
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;}
_lrotl, _lrotr #include <stdlib.h>
Efectua deslocamento de um inteiro longo para a esquerda/direita.
unsigned long _lrotl(unsigned long val, int count);unsigned long _lrotr(unsigned long val, int count);
retorno: val deslocado (shift) count bits para esquerda ou direita.
argumentos:val longcount numero de bits a deslocar
Obs : desloca count bits para a esquerda.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : _rotl, _rotr.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 19/33
71
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;}
lsearch #include <stdlib.h>
Função que realiza pesquisa linear.
void *lsearch(const void *key, void *base, size_t *num,size_t width, int (*fcmp)(const void *, const void *));
retorno: ponteiro para o primeiro elemento encontrado.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 20/33
72
argumentos:base Primeiro endereço do vectorfcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementoskey Elemento a encontrarnelem Numero de elemento no vector.width Numero de bytes de cada elemento.
.
Obs : Efectua uma pesquisa binária do valor key no vector base denelem elementos, no casode não encontrar adiciona a chave ao vector.
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : lsearch, lfind.
Exemplo
#include <stdlib.h>#include <stdio.h>#include <string.h> /* para utilização da função strcmp */
/* inicializa o numero de cores */
char *colors[10] = { "Red", "Blue", "Green" };int ncolors = 3;
int colorscmp(char **arg1, char **arg2){
return(strcmp(*arg1, *arg2));}
int addelem(char *key){
int oldn = ncolors;lsearch(key, colors, (size_t *)&ncolors, sizeof(char *),
(int(*)(const void *,const void *))colorscmp);return(ncolors == oldn);
}
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);
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 21/33
73
printf("%s adicionada à tabela de cores\n", key);}
printf("As cores são:\n");for (i = 0; i < ncolors; i++)
printf("%s\n", colors[i]);return 0;
}
ltoa #include <stdlib.h>
Converte um inteiro longo para uma string.
char *ltoa(long value, char *string, int radix);
retorno: ponteiro para variável string que receba valor convertido. Ou NULL em caso de erro.
argumentos:value valor a converterstring 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 inicioda string.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : atoi, atol, ecvt, fcvt, gcvt, scanf, strtod.
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;}
_lmakepath #include <stdlib.h>Ver ajudas do Turbo C.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 22/33
74
malloc #include <stdlib.h>
Efectua alocação de bloco de memória disponível no Heap.
void *malloc(size_t size);
retorno: ponteiro para inicio da área de memória reservada. Em caso de erro devolve ponteiroNULL.
argumentos:size tamanho do bloco de memória em bytes.
Obs : Ver a utilização de sizeof( ).
DOS UNIX WINDOWS ANSI CSim Sim Sim
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;
/* aloca 10 bytes de memória */ if ((str = (char *) malloc(10)) == NULL){
printf("Não existe memória suficiente para alocar\n");exit(1); /* termina o programa */
} /* copia "Hello" para a string */ strcpy(str, "Hello");
/* mostra string */ printf("String is %s\n", str);
/* liberta memória */ free(str);
return 0;}
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 23/33
75
max #include <stdlib.h>
Ver ajudas do Turbo C.
mblen #include <stdlib.h>Ver ajudas do Turbo C.
mbtowc #include <stdlib.h>
Ver ajudas do Turbo C.
mbtowcs #include <stdlib.h>
Ver ajudas do Turbo C.
min #include <stdlib.h>
Ver ajudas do Turbo C.
putenv #include <stdlib.h>
Substitui a string das variáveis de ambiente.
int putenv(const char *name);
retorno: No caso de sucesso devolve 0, em caso de erro devolve –1.
argumentos:name string contendo as novas variáveis de ambiente.
Obs :
DOS UNIX WINDOWS ANSI C
Sim Sim Sim Sim
Ver também : getenv.
Exemplo
Ver exemplo da função getenv( ).
qsort #include <stdlib.h>
Efectua a ordenação de um vector utilizando o algoritmo qsort .
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 24/33
76
void qsort(void *base, size_t nelem,size_t width, int (*fcmp)(const void *, const void *));
retorno: No caso de sucesso devolve 0, em caso de erro devolve –1.
argumentos:
base Primeiro endereço do vectorfcmp função definida pelo programador que devolve resultado da comparação
entre os dois elementoskey Elemento a encontrarnelem Numero de elemento no vector.width Numero de bytes de cada elemento.
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também :
Exemplo
#include <stdio.h>#include <stdlib.h>
#include <string.h>int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void){
int x;
qsort((void *)list, 5, sizeof(list[0]), sort_function);for (x = 0; x < 5; x++)
printf("%s\n", list[x]);return 0;
}
int sort_function( const void *a, const void *b){
return( strcmp((char *)a,(char *)b) );}
rand #include <stdlib.h>Gera um pseudo numero aleatório
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 25/33
77
int rand(void);
retorno: Devolve o numero pseudo aleatório .
argumentos:
Obs : Devolve um numero pseudo aleatório entre 0 e MAX_RAND.
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : randomize, srand.
Exemplo
#include <stdlib.h>#include <stdio.h>
int main(void){
int i;
printf("Dez numeros entre 0 e 99\n\n");for(i=0; i<10; i++)
printf("%d\n", rand() % 100);return 0;}
random #include <stdlib.h>
função que devolve numero aleatório
int random(int num);
retorno: Devolve o numero aleatório .
argumentos:
Obs : Devolve um numero pseudo aleatório entre 0 e num-1.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : rand, randomize, srand.
Exemplo
#include <stdlib.h>
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 26/33
78
#include <stdio.h>#include <time.h>
/* mostra um numero entre 0 e 99 */ int main(void)
{randomize();printf("numero aleatório entre 0 e 99: %d\n", random (100));return 0;
}
randomize #include <stdlib.h>, #include<time.h>
Macro que inicializa o gerador de numeros aleatórios.
void randomize(void);
retorno:
argumentos:
Obs : Utiliza uma função definida em time.h.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : rand, randomize, srand.
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;
}
realloc #include <stdlib.h >
Realloc realoca bloco de memória numa nova posição.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 27/33
79
*realloc(void *block, size_t size);
retorno: Ponteiro para o bloco de memória alocado. Em caso de erro devolve um ponteiroNULL.
argumentos:block ponteiro para o bloco de memória previamente alocadosize 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çãode memória..
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : faralloc( ) nas ajudas.
Exemplo
#include <stdio.h>#include <alloc.h>#include <string.h>
int main(void){
char *str; /* Aloca 10 bytes */ str = (char *) malloc(10);
/* copia "Hello" para dentro de string */ strcpy(str, "Hello");
printf("String é %s\n e o endereço é %p\n", str, str);str = (char *) realloc(str, 20);printf("String é %s\n e o novo endereço é %p\n", str, str);
/* libertação da memória*/ free(str);
return 0;}
_rotl, _rotr #include <stdlib.h>
_rotl desloca um inteiro n bits para a esquerda._rotr desloca um inteiro n bits para a direita.
Ver as _lrotl( ) e _lrotr( ).
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 28/33
80
_searchenv #include <stdlib.h >
Procura um ficheiro em determinado caminho de pesquisa path .
_splitpath #include <stdlib.h >
Decompõe o caminho de pesquisa ( path) nos seus componentes.
srand #include <stdlib.h >
Função que inicializa o gerador de números aleatórios.
void srand(unsigned seed);
retorno:argumentos:
seed numero inteiro que serve de semente para o gerador.
Obs : Normalmente utiliza-se o relógio do sistema para semente do gerador.
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
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;
}
strtod #include <stdlib.h >
Converte uma string num real de dupla precisão, double.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 29/33
81
double strtod(const char *s, char **endptr);
retorno: valor convertido ou no caso de overflow devolve plus, minus HUGE_VAL.
argumentos:
Obs
DOS UNIX WINDOWS ANSI CSim Sim Sim Sim
Ver também : endptr argument, radix argument, atof, atol.
Exemplo
#include <stdio.h>#include <stdlib.h>
int main(void){
char input[80], *endptr;double value;
printf("Digie um valor real:");gets(input);value = strtod(input, &endptr);printf("A string é %s e o número é %lf\n", input, value);return 0;
}
strtol #include <stdlib.h >
Converte uma string num inteiro longo.
long strtol(const char *s, char **endptr, int radix);
retorno: valor convertido ou no caso de erro zero.
argumentos:
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : endptr argument, radix argument, atof, atol.Exemplo
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 30/33
82
#include <stdlib.h>#include <stdio.h>
int main(void){
char *string = "87654321", *endptr;long lnumber;
/* strtol converte a string em long */ lnumber = strtol(string, &endptr, 10);printf("string = %s long = %ld\n", string, lnumber);
return 0;}
_strtold #include <stdlib.h >
Converte uma string num longo real .
long double _strtold(const char *(s), char **(endptr));
retorno: valor convertido ou no caso de overflow devolve plus, minus HUGE_VAL.
argumentos:
Obs :
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : endptr argument, radix argument, atof, atol.
Exemplo
Ver função strtod( ).
strtoul #include <stdlib.h >
Converte uma string num longo não sinalizado.
unsigned long strtoul(const char *s, char **endptr, int radix);
retorno: valor convertido ou no caso de erro zero.
argumentos:
Obs :
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 31/33
83
DOS UNIX WINDOWS ANSI CSim Sim Sim
Ver também : endptr argument, radix argument, atof, atol.
Exemplo
#include <stdlib.h>#include <stdio.h>
int main(void){
char *string = "87654321", *endptr;unsigned long lnumber;
lnumber = strtoul(string, &endptr, 10);printf("string = %s long = %lu\n",string, lnumber);
return 0;}
swab #include <stdlib.h >
Troca nbytesdo endereço from para to.
void swab(char *from, char *to, int nbytes);
retorno:
argumentos:from ponteiro para endereço de origemto ponteiro para endereço de destinonbytes numeros de bytes a trocar.
Obs : Optimo para manter trocar a ordem do bytes na conversão Little Indian / Big Indian (???)
DOS UNIX WINDOWS ANSI CSim sim Sim
Ver também :
Exemplo
#include <stdlib.h>
#include <stdio.h>#include <string.h>
char source[15] = "rFna koBlrna d";
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 32/33
84
char target[15];
int main(void){
swab(source, target, strlen(source));
printf("This is target: %s\n", target);
return 0;}
system #include <stdlib.h >
Executa um comando do sistema operativo.
int system(const char *command);
retorno: Em caso de sucesso 0. No caso de erro devolve –1 e coloca errno a ENOENT,ENOMEM, E2BIG, or ENOEXEC.
argumentos:command string com comando a executar
Obs : Optimo para manter trocar a ordem do bytes na conversão Little Indian / Big Indian (???)
DOS UNIX WINDOWS ANSI CSim sim Sim
Ver também : exec, spawn.
Exemplo
#include <stdlib.h>#include <stdio.h>
int main(void){
printf("About to spawn command interpreter and run a DOS command\n");system("dir");return 0;
}
ultoa #include <stdlib.h>
Converte um inteiro longo não sinalizado para uma string.
char *ultoa(unsigned long value, char *string, int radix);
retorno: ponteiro para variável string que receba valor convertido. Ou NULL em caso de erro.
5/12/2018 Biblioteca Stdlib - slidepdf.com
http://slidepdf.com/reader/full/biblioteca-stdlib 33/33
85
argumentos:value valor a converterstring 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 inicioda string.
DOS UNIX WINDOWS ANSI CSim Sim
Ver também : atoi, atol, ecvt, fcvt, gcvt, scanf, strtod.
Exemplo
#include <stdlib.h>#include <stdio.h>
int main( void ){
unsigned long lnumber = 3123456789L;char string[25];
ultoa(lnumber,string,10);
printf("string = %s unsigned long = %lu\n",string,lnumber);return 0;
}
wctomb #include <stdlib.h>
Converte um array do tipo wchar_t em numa string multi-bytes.Ver ajudas.
wcstombs #include <stdlib.h>Converte codigo do tipo wchar_t num caracter multibyte.Ver ajudas.