34
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 atexit atof atoi atol  bse ar ch calloc div ec vt exit _ex it fcvt free _fullpath gcvt getenv itoa labs ldiv lfind  _lrotl _lrotr lsear ch ltoa _makep ath mal loc m ax mblen mbtowc mbstowcs mi n pute nv qsort rand random randomiz e realloc _rotl  _ro tr _se arc he nv _sp lit pat h srand strtod strtol  _st rto ld strt oul swa b syste m ultoa wctomb wcstombs Dada a sua pouca utilização alguma s d estas funções não serão des cr it as em porm en or neste guia. Os alunos interessados na sua descrição poderão consu ltar as ajudas do Turbo C ou man do Gnu C.

Biblioteca Stdlib

Embed Size (px)

Citation preview

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.