Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué opinas del código fuente strcpy?

¿Qué opinas del código fuente strcpy?

# include & ltdos.h & gt/*Funciones de interfaz DOS*/

# include & ltmath.h & gt/*Definición de funciones matemáticas*/

# include & ltconio. h & gt/*Función de operación de pantalla*/

# include & ltstdio.h & gt/*Función de E/S*/

# include & ltstdlib.h & gt/* Función de biblioteca*/

# include & ltstdarg.h & gt/*Lista de parámetros de longitud variable*/

# include & ltstdarg.h & gt/*Función de gráficos*/< / p>

# include & ltstring.h & gt/*Función de cadena*/

# include & ltctype.h & gt/*Función de operación de caracteres*/

#define ARRIBA 0x48 /*Tecla cursor arriba*/

#definir ABAJO 0x50 /*Tecla cursor abajo*/

#Definir izquierda 0x4b /*Tecla cursor izquierda*/

#define right 0x4d /*Botón derecho del cursor*/

#define ENTER 0x0d /* Enter */

void * rar/*Variable global, guardar imagen del cursor* /

estructura tipo paleta paleta; /*Usar información de paleta*/

int GraphDriver/*Controlador de dispositivo de gráficos*/

int GraphMode/ *Valor del modo de gráficos*/

int código de error; /*Código de error*/

int MaxColors/*Número máximo de colores disponibles*/

int MaxX , MaxY/*La resolución más alta de la pantalla*/

Giro de doble cara /*La proporción de píxeles de la pantalla*/

void draw boder(void); p>

inicialización nula (void); /*función de inicialización*/

computadora nula (void); /*función de cálculo de la calculadora*/

void changetextstyle (fuente int, int dirección, int charsize); /*Función de cambio de estilo de texto*/

void m window(char * header) /*Función de ventana*/

int tecla especial(void) ;/*Obtener la función de tecla especial*/

int arrow();/*Establecer la función de cursor de flecha*/

/*Función principal*/

int main()

{

initialize();/*Configurar el sistema en modo gráfico*/

Computadora();/*Ejecutar cálculos * /

closegraph(); /*El sistema cierra el modo de gráficos y vuelve al modo de texto*/

return(0); >

}

/*Configurar el sistema para ingresar al modo de gráficos*/

inicialización nula (void)

{

int xasp, yasp /*Se utiliza para leer la relación de aspecto en las direcciones X e Y*/

GraphDriver = DETECT/*Detectar automáticamente la pantalla*/

iniciar gráfico (y controlador de gráfico & GraphMode, "";

/*Inicializar el sistema de gráficos*/

código de error = resultado del gráfico() /*Leer el resultado de la inicialización*/

p>

if( ErrorCode!= grOk) /*Si ocurre un error durante el proceso de inicialización*/

{

printf("Error del sistema de gráficos: %s\n " ,

grapherrormsg(código de error)); /*Mostrar código de error*/

Salir (1); /*Salir*/

}

obtener paleta(& paleta);/*Leer información del panel*/

colores máximos = obtener maxcolor()+1;/*Leer el valor máximo de color*/

MaxX = obtener MaxX(); /*Leer tamaño de pantalla*/

MaxY = obtener MaxY() /*Leer tamaño de pantalla*/

getaspectratio(&

}

/*Función de calculadora*/

Equipo no válido (no válido)

{

struct viewporttype vp/*Definir variables de tipo de ventana gráfica*/

int color, alto, ancho;

int x, y, x0, y0, I, j, v, m, n, act , flag = 1;

float num1=0, num2=0, result; /*operandos y variables de resultado de cálculo*/

char cnum[5], str2[ 20]= {""},c,temp[20]= { " " };

Char·str1[]="1230.456+-789*/qc=^%";/*Definición Símbolo de cadena que se se muestra en el gráfico del botón */

mwindow("Calculadora"); /*Mostrar la ventana principal*/

Color = 7 /*Establecer el valor de gris */

getview settings(&VP);/*Leer el tamaño de la ventana actual*/

Width=(VP . right+1)/10;/*Ancho del botón de configuración*/

height =(VP . bottom-10)/10 /*Establece la altura del botón*/

x =Ancho/2 /*Establece el valor de las coordenadas de x */

y = height/2; /*Establece el valor de las coordenadas de y*/

setfillstyle(SOLID_FILL, color+3);

bar(x+ Ancho *2, y, x+7 *ancho, y+alto);

/*Dibuja una barra rectangular bidimensional para mostrar los operandos y resultados*/

setcolor(color+ 3);/*Establecer línea de borde verde claro*/

Rectángulo (x+ancho*2, y, x+7*ancho, y+alto);

/*Dibujar una línea de borde rectangular */

setcolor(red);*Establecer color en rojo*/

out textxy(x+3 *width, y+height/2, "0 .

");/*Cadena de salida "0"*/

x = 2 *Width-Width/2; /*Establece el valor de las coordenadas de x*/

y = 2 * Altura + altura/2 /*Establecer el valor de las coordenadas de y*/

for(j = 0; j & lt4;++j) /*Dibujar un botón*/

{

for(I = 0;i<5;++i)

{

setfillstyle(SOLID_FILL, color);

setcolor(red);

bar(x, y, x+width, y+height /*Dibujar una barra rectangular*/

Rectangle(x, y, x+); ancho, y+alto);

sprintf(str2, " %c ", str 1[j * 5+I]);

/*Guardar los caracteres en str2*/

outtextxy(x+(ancho/2), y+alto/2, str 2);

x = x+ancho+(ancho/2); /*Mover coordenadas de columna* /

}

y +=(alto/2)* 3;/*Mover coordenadas de línea*/

x = 2 *Ancho-Ancho/2 ;/*Coordenadas de columna de altura*/

}

x0 = 2 * ancho;

y0 = 3 * alto

x; = x0

y = y0

gotoxy(x, y /*Mueve el cursor a la posición x, y*/

flecha(); /*Mostrar el cursor */

putimage(x, y, rar, XOR _ PUT

m =

n = 0; /p>

strcpy(str2, " "); /*Establece str2 como una cadena vacía*/

while((v=specialkey())!=45) /*Presiona Alt+x para finalizar el programa; de lo contrario, ejecute el siguiente bucle*/

{

while((v=specialkey())!=ENTER) /*No se ingresa cuando se presiona la tecla */

{

putimage(x, y, rar, XOR _ PUT /*Mostrar imagen del cursor*/

If(v==RIGHT); ) /*Mover flecha hacia la derecha Cálculo de nueva posición */

if (x & gt; = x6 *ancho)

/*Si te mueves hacia la derecha y te mueves a al final, muévase a la posición del carácter del extremo izquierdo */

{

x = x0

m = 0;

}

Otros

{

x = x+ancho+ancho/2

m++; * En caso contrario, mueve hacia la derecha y hacia abajo Una posición de carácter*/

If(v==LEFT) /*Cálculo de la nueva posición al mover la flecha hacia la izquierda*/

if(x & lt;=x0)

{

x = x6 *ancho

m =

}/*Si te mueves a la cabeza, luego a la izquierda, luego muévete a la posición del personaje más a la derecha*/

Otros

{

x = x-width-width/2;

m-;

}/* De lo contrario, muévase a la izquierda a la posición del carácter anterior*/

If(v= =UP) /*Nueva posición al mover la flecha hacia arriba Cálculo*/

if(y & lt;=y0)

{

y = y 4 *height+height/2;

n = 3;

}/*Si se mueve a la cabeza y luego se mueve hacia arriba, se mueve a la posición inferior del personaje*/

Otro

{

y = y-altura-altura

ht/2;

n-;

}/* De lo contrario, muévase al bit superior de un carácter*/

If(v==DOWN) /* Cálculo de nueva posición al mover la flecha hacia abajo*/

If (y & gt= 7 *high)

{

y = y0

n = 0;

}/*Si se mueve hasta el final y luego se mueve hacia abajo, se mueve a la posición superior del personaje*/

Otro

{

y = y+height+height/2;

n++;

}/*De lo contrario, pasa a la siguiente posición del carácter*/

putimage(x,y,rar,XOR_PUT);/*Mostrar flecha del cursor en la nueva posición*/

}

c = str 1[n * 5+ m ];/*Guardar los caracteres en la variable c*/

If (isdigit (c) || ​​​​c = ' . ')/*Determinar si es un número o un punto decimal*/

{

Si (flag = -1)/*Si la bandera es -1, significa un número negativo*/

{

strcpy(str2, "-") ;/*Concatenar los signos menos en una cadena*/

flag = 1;

}/*Restaurar el valor de la bandera a 1 */

sprintf( temp, " %c ", c); /* Guardar los caracteres en la variable de cadena temp */

strcat(str2, temp /* Connect); la cadena en temp a str2 */

setfillstyle(SOLID_FILL, color+3);

Bar(2*width+width/2, height/2, 15*width/2 , 3*alto/2);

outtextxy(5 *ancho, alto, cadena 2); /*display string*/

}

if( c=='+')

{

num 1 = atof(str 2);/*Convierte el primer operando a un número de punto flotante*/

strcpy(str2," "); /*Empty str2 */

act = 1; /*Calcular y agregar valor de bandera*/

setfillstyle(SOLID_FILL, color+3) ;

Bar(2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2);

out textxy(5*ancho, alto , "0. ");/*Mostrar cadena*/

}

if(c=='-')

{

If (strcmp(str2, " ")==0) /*Si str2 está vacío, significa un signo menos, no un signo negativo*/

flag =-1; bandera de número negativo*/

Otros

{

num 1 = atof(str 2);

strcpy(str2, " "); /* Vaciar str2 */

act = 2; /* Calcular el valor del indicador de resta */

setfillstyle( SOLID_FILL, color+3) ;

Barra (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2 /*Dibujar un rectángulo*/

out textxy(5 *ancho, alto, "0.

");/*Mostrar cadena*/

}

}

if(c=='* ')

{

num 1 = atof(str 2); /*Convierte el segundo operando a un número de coma flotante*/

strcpy(str2, " "); /p>

act = 3; /*Calcular el valor del indicador de multiplicación*/

setfillstyle(SOLID_FILL, color+3); * ancho / 2, 3 * alto / 2);

out textxy (5 * ancho, alto, "0."); /* mostrar cadena */

}

if(c=='/')

{

num 1 = atof(str 2);/*Convertir la segunda operación Convertir número a número de coma flotante */

strcpy(str2, " "); /* Vaciar str2 */

act = 4; /* Realizar el cálculo del valor del indicador de división */

setfillstyle(SOLID_FILL, color+3);

Bar(2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2);

out textxy(5 *ancho, alto, "0.");/*display string*/

}

if(c=='^ ')

{

num 1 = atof(str 2); /*Convierte el segundo operando a un número de punto flotante*/

strcpy(str2 , " ");/* Vaciar str2 */

act = 5;/*Calcular el valor del símbolo de poder*/

setfillstyle(SOLID_FILL, color+3);/*Establecer para rellenar con un sólido verde claro */

Bar (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2); /*Dibuja un rectángulo*/

fuera textxy; (5 *ancho, alto, "0.");/*display string*/

}

if(c=='% ')

{

num 1 = atof(str 2); /*Convierte el segundo operando a un número de coma flotante*/

strcpy(str2, " ") Vaciar str2 *); /

act = 6; /* Calcular el valor del indicador de exponenciación modular */

setfillstyle(SOLID_FILL, color+3) /*Establecer Para rellenar con entidades de color verde claro*/<); /p>

Bar (2*ancho+ancho/2, alto/2, 15*ancho/2, 3*alto/2); /*Dibuja un rectángulo*/

out textxy( 5 * ancho, alto, " 0.

");/*Mostrar cadena*/

}

if(c=='= ')

{

num 2 = atof(str 2);/*Convertir el segundo operando a un número de punto flotante*/

Cambiar (act) /*Calcular según el símbolo de operación*/

{

Caso 1: Resultado = num 1+num 2; /*Sumar*/

Caso 2: Resultado = num 1-num 2;

Caso 3: Resultado = num 1 * num 2; /*Hacer multiplicación*/

Caso 4: Resultado = num 1/núm 2; */

Caso 5: Resultado = pow(num1, num 2); /*Hacer x la potencia de y*/

Caso 6: Resultado = fmod(num1, num 2); Break; /*Hacer operación modular*/

}

setfillstyle(SOLID_FILL, color+3); /*Establecer para rellenar con entidades de color verde claro*/

Bar(2*width+width/2, height/2, 15*width/2, 3*height/2); /*cubrir el área de resultados*/

sprintf(temp). , " %f ", resultado); /*Guardar el resultado en temp*/

outtextxy(5 *ancho, alto, temperatura /*Mostrar el resultado*/

); }

if(c=='c ')

{

num 1 = 0; /*Restablece ambos operandos a 0, el signo es 1* /

num 2 = 0;

bandera = 1;

strcpy(str2, " "); p>setfillstyle(SOLID_FILL, color+3); /*Establecer para rellenar con entidades de color verde claro*/

Barra (2 * ancho + ancho / 2, alto / 2, 15 * Ancho/2, 3); * Height/2); /* Cubrir el área de resultados */

out textxy (5 * Ancho, Alto, " 0.

");/*Display string*/

}

if(c == ' Q ')exit(0); /*Si se selecciona Q Enter, finaliza el cálculo. Programa */

}

putimage(x, y, rar, XOR _ PUT); /*Eliminar la flecha del cursor antes de salir*/

Regresar; * Retorno */

}

/*Función de ventana*/

void mwindow( char *header)

{

int height;

clear device();/*Borrar la pantalla de gráficos*/

establecer color(max colours-1);/*Establecer el color actual en White*/

setviewport(20, 20, MaxX/2, MaxY/2, 1, /*Establece el tamaño de la ventana gráfica*/

height = altura del texto(" H "); ); /*Leer el tamaño del texto básico*/

settextstyle(DEFAULT_FONT, HORIZ_DIR, 1); /*Establecer estilo de texto*/

settextjustify(CENTER_TEXT, TOP_TEXT); Establecer la disposición de los caracteres*/

outtextxy(MaxX/4, 2, header /*Título de salida*/

setviewport(20, 2height+4, MaxX /); 2+4, MaxY/2+20, 1); /*Establecer el tamaño de la ventana gráfica*/

dibujar borde() /*Dibujar el borde*/

}

Void drawboder(void) /*Dibujar el borde*/

{

struct viewporttype vp/*Definir la variable de tipo de ventana gráfica*/

set color(max colours-1); /*Establece el color actual en blanco*/

setlinestyle(SOLID_LINE, 0, NORM _ WIDTH /*Establece el método de dibujo lineal*/

getview settings(&VP);/*Cargue la información de la ventana gráfica actual en la estructura señalada por vp*/

Rectangle (0, 0, vp.right-vp.left, VP . bottom-VP . top);/*Dibujar un borde rectangular*/

}

/*Diseñar función de gráficos del mouse*/

Flecha entera ()

{

int tamaño;

int raw[]={4, 4, 4, 8, 6, 8, 14, 16, 16, 16 , 8 , 6, 8, 4, 4, 4}; /*Definir coordenadas de polígono*/

setfillstyle(SOLID_FILL, 2 /*Establecer modo de relleno*/

fillpoly); (8, raw); /*Dibujar flecha del cursor*/

size=imagesize(4, 4, 16, 16) /*Probar tamaño de imagen*/

rar=malloc); (tamaño); /*Asignar área de memoria*/

getimage(4, 4, 16, 16, rar /*Almacenar imagen de flecha del cursor*/

putimage(4, 4, rar, >

int tecla especial(void)

{

int clave;

mientras(clave BIOS(1)= = 0); /*esperar la entrada del teclado*/

tecla = tecla BIOS(0); /*entrada del teclado*/

clave=clave&0xff? Llaves y llaves. 0x ff:key>& gt8;/*Solo toma el valor escaneado de la clave especial, el resto es 0*/

Introducir clave;/*Devuelve el valor de la clave*/

}