Você está na página 1de 33

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
bsearch calloc div
ecvt exit _exit
fcvt free _fullpath
gcvt getenv itoa
labs ldiv lfind
_lrotl _lrotr lsearch
ltoa _makepath malloc
max mblen mbtowc
mbstowcs min putenv
qsort rand random
randomize realloc _rotl
_rotr _searchenv _splitpath
srand strtod strtol
_strtold strtoul swab
system ultoa wctomb
wcstombs

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.

DOS UNIX WINDOWS ANSI C


Sim 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 C


Sim Sim Sim Sim

Ver também : fabs, labs, fabsl.

54
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 ser
convertida 0.

argumentos: ponteiro para string.


Obs : O primeiro caracter não conversível interrompe a conversão.

DOS UNIX WINDOWS ANSI C


Sim 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;
}

55
atoi #include <stdlib.h>
Macro que converte uma string num valor inteiro .

int atoi(const char *s);

retorno: valor convertido em caso de suc esso. Ou erro no caso da string não poder ser
convertida 0.

argumentos: ponteiro para string.


Obs : O primeiro caracter não conversível interrompe a conversão. È necessário cuidado nas
situações de overflow.

DOS UNIX WINDOWS ANSI C


Sim 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 ser
convertida 0.

argumentos: ponteiro para string.


Obs : O primeiro caracter não conversível interrompe a conversão. È necessário cuidado nas
situações de overflow.

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);
}

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 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.

DOS UNIX WINDOWS ANSI C


Sim Sim Sim

Ver também : lsearch, lfind.

Exemplo
57
#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 rlam@ualg.pt */

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 at
compile 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");
else
printf("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ã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.

DOS UNIX WINDOWS ANSI C


Sim 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 numerador
denom denominador.
59
.

Obs :

DOS UNIX WINDOWS ANSI C


Sim 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 decimal
sign devolução do sinal “-/+” de value.

Obs :

DOS UNIX WINDOWS ANSI C


Sim Sim

Ver também : gcvt, fcvt.

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);

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 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( ).

DOS UNIX WINDOWS ANSI C


Sim Sim

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');

/* 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 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( ).

DOS UNIX WINDOWS ANSI C


Sim Sim

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");
}

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 digitos
dec devolução parte decimal
sign devolução do sinal “-/+” de value.

Obs :

DOS UNIX WINDOWS ANSI C


Sim 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;

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;

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ção
dinâ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;

64
/* 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 C


Sim

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 converter
ndec numero de dígitos significativos a converter
buf ponteiro para string buf de armazenamento da conversão

Obs :

DOS UNIX WINDOWS ANSI C


Sim Sim

Ver também : ecvt, fcvt, sprintf.

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);
}

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 C


Sim Sim

Ver também : putenv, environ, getpsp.

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;

/* 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 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.

DOS UNIX WINDOWS ANSI C


Sim

Ver também : ltoa, ultoa.

Exemplo
#include <stdlib.h>
#include <stdio.h>

67
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>

68
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 longo
denominador valor inteiro longo

Obs :

DOS UNIX WINDOWS ANSI C


Sim 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 o
elemento.

argumentos:
ver bsearch, lsearch

Obs :

DOS UNIX WINDOWS ANSI C


Sim Sim Sim

69
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 long
count numero de bits a deslocar

Obs : desloca count bits para a esquerda.

DOS UNIX WINDOWS ANSI C


Sim Sim

Ver também : _rotl, _rotr.

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;
}

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.

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.

DOS UNIX WINDOWS ANSI C


Sim 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);

72
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 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.

DOS UNIX WINDOWS ANSI C


Sim 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.

73
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 ponteiro
NULL.

argumentos:
size tamanho do bloco de memória em bytes.

Obs : Ver a utilização de sizeof( ).

DOS UNIX WINDOWS ANSI C


Sim 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;
}

74
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 WINDOW S 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.

75
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 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 :

DOS UNIX WINDOWS ANSI C


Sim 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
76
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 C


Sim 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 C


Sim Sim

Ver também : rand, randomize, srand.

Exemplo

#include <stdlib.h>
77
#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 C


Sim 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.

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..

DOS UNIX WINDOW S ANSI C


Sim 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( ).

79
_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 C


Sim 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.

80
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 C


Sim 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 C


Sim Sim Sim

Ver também : endptr argument, radix argument, atof, atol.

Exemplo

81
#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 C


Sim 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 :

82
DOS UNIX WINDOW S ANSI C
Sim 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 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 (???)

DOS UNIX WINDOWS ANSI C


Sim sim Sim

Ver também :

Exemplo

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char source[15] = "rFna koBlrna d";


83
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 C


Sim sim Sim

Ver também : exec, spawn.

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;
}

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.

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.

DOS UNIX WINDOWS ANSI C


Sim 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.

85

Você também pode gostar