Clase04: lenguaje C: strings y bibliotecas (v1d)

18
ARCOS @ UC3M Alejandro Calderón Mateos Sistemas Operativos sesión 4: aspectos del lenguaje C Grado en Ingeniería Informática Universidad Carlos III de Madrid

Transcript of Clase04: lenguaje C: strings y bibliotecas (v1d)

Page 1: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Sistemas Operativossesión 4: aspectos del lenguaje C

Grado en Ingeniería Informática

Universidad Carlos III de Madrid

Page 2: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Tiras de caracteres o strings

• Bibliotecas

Page 3: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Tiras de caracteres o strings

• Bibliotecas

Page 4: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Tiras de caracteres (strings)

• char tira1[5] ;strcpy(tira1,”hola”) ;

– Tira de caracteres con 5 caracteres (0 a 4), de los cuales uno se usará para el fin de cadena.

tira1[0]==‘h’ tira1[9]==‘\0’

‘\0’‘a’‘l’‘o’‘h’

0x010

0x010tira1=

0x011 0x012 0x013 0x014

0x015

0x009

Page 5: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Tiras de caracteres (strings)

• char *tira2;

– Puntero que podrá apuntar al comienzo de una tira de caracteres:

• tira2 = tira1 ; – Existente: espacio de memoria de otra variable

• tira2 = malloc(200*sizeof(char)) ;strcpy(tira2,”hola mundo\n”) ;– Nueva: reserva de espacio propio de memoria

en tiempo de ejecución

Page 6: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

string.h

• strcpy(destino,origen) ;– Copia el contenido de memoria de origen a destino.

• strcat(destino,origen);– Añade el contenido de origen al final de destino.

• strlen(cadena);– Indica el número de caracteres de origen

(sin considerar el carácter reservado para fin de string).

• strcmp(cadena,otraCadena);– Compara dos cadenas alfabéticamente (‘A’!=‘a’).

Page 7: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Tiras de caracteres o strings

• Bibliotecas

Page 8: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Declaración vs definición

• extern int g1 ;int funcion1 ( int p1, char p2 ) ;

– Se indica los tipos usados y el nombre PERO no se reserva memoria ni se define su valor.

• int g1 = 10 ;int funcion1 ( int p1, char p2 ) { … }

– Se indica los tipo usa y el nombre,y además se reserva espacio y define valor.

de

clar

ació

n

def

inic

ión

Page 9: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión iniciald

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

mi.h

Page 10: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión iniciald

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

mi.h

def

inic

ion

es

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 11: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión iniciald

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

#include “mi.h”

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

mi.hmain.c

def

inic

ion

es

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 12: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión iniciald

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

#include “mi.h”

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

mi.hmain.c

def

inic

ion

es

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 13: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: usuario vs sistemad

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

#include “mi.h”

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

mi.h

bibliotecas de sistema

bibliotecas de sistema o de usuario

def

inic

ion

es

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 14: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: compilación y enlazado d

ecl

arac

ion

esd

efin

icio

nes

extern int g1 ;

int funcion1( int p1,

char p2 );

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

#include “mi.h”

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

mi.h

mi.c

gcc –Wall –g –o mi.o –c mi.cgcc –Wall –g –o main.o –c main.cgcc –o main main.o mi.o

main.c

Page 15: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

extern int g1 ;

int funcion1( int p1,

char p2 );

... // stdio.h

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

Bibliotecas: compilación y enlazado d

ecl

arac

ion

es extern int g1 ;

int funcion1( int p1,

char p2 );

mi.h

#include indica al preprocesador: “cambiarme por el contenido del archivo”

def

inic

ion

es

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 16: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión completad

ecl

arac

ion

es

#ifndef _MI_H_

#define _MI_H_

extern int g1 ;

int funcion1( int p1,

char p2 );

#endif

#include “mi.h”

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int r ;

r=funcion1(5,’0’) ;

printf(“r=%d\n”,r) ;

return 0 ;

}

mi.h

main.c

def

inic

ion

es

#include “mi.h”

int g1 = 10 ;

int funcion1( int p1,

char p2 )

{

return p1+(int)p2 ;

}

mi.c

Page 17: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Bibliotecas: versión completa

#ifndef _MI_H_

#define _MI_H_

...

#endif

#include “mi.h”

#include “mj.h”

...

mi.hmain.c

#include “mi.h”

...

mi.c #ifndef _MJ_H_

#define _MJ_H_

#include “mi.h”

...

#endif

mj.h

#include “mj.h”

...

mj.c

La estructura:#ifndef _X_#define _X_

…#endifevita múltiples inclusionesno necesarias

Page 18: Clase04: lenguaje C: strings y bibliotecas (v1d)

ARCOS @ UC3MAlejandro Calderón Mateos

Sistemas Operativossesión 4: aspectos del lenguaje C

Grado en Ingeniería Informática

Universidad Carlos III de Madrid