Catálogo de series de artículos: Explicación detallada de funciones de caracteres y funciones de cadena (1) Explicación detallada de strcmp
strlen strcpy strcat
Tabla de contenido
Este número presenta principalmente la función de impresión de información de error y la función de operación de memoria , y presenta brevemente la función de operación de caracteres (puede usarla con soltura)
1. Informe de mensaje de error
Uso de la función strerror
El código de error 0 1 2 3 4 está definido en el lenguaje C y el efecto impreso es como se muestra en la siguiente imagen:
errno es una variable de error global proporcionada por el lenguaje C. Al usarlo, el archivo de encabezado #include <errno .h> debe incluirse. Cuando usamos una función para informar un error, el código de error correspondiente se asignará a errno . En este momento, podemos usar la función strerror para imprimir el mensaje de error correspondiente.
Ejemplo de código:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<String.h>
#include <errno.h>
int main()
{
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
perror("fopen:"); //稍后再说
printf("%s\n", strerror(errno));//打印的是errno变量中错误码对应的错误信息
return 1;
}
//读文件
fclose(pf);
pf = NULL;
return 0;
}
Resultados de la ejecución:
los amigos cuidadosos encontrarán que usé perror ("fopen:"); en el código, de hecho, la función perror se usa para agregar una descripción al mensaje de error, que
puede entenderse como "información de descripción + strerror ( errno); "
2. Función de operación de memoria
1.memcpy
void* memcpy ( void* destino, const void* fuente, size_t num);
(1) Uso de memcpy
Llamamos a la función memcpy una función de copia de memoria, que copia directamente el valor de num bytes desde la ubicación señalada por el origen al bloque de memoria señalado por el destino .
Ejemplo de código:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
int destination[10] = {
0 };
int source[10] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
memcpy(destination, source, 8);
//float arr1[] = { 1.0f,2.0f,3.0f,4.0f };
//float arr2[5] = { 0.0 };
//memcpy(arr2, arr1, 8);
return 0;
}
A diferencia de strcpy , memcpy copia en unidades de memoria y no utiliza el terminador \0 como su propia marca final. En otras palabras, memcpy no tiene marca final, por lo que se copiará directamente a num antes de finalizar.
Además, memcpy no se usa para copiar dos bloques de memoria superpuestos. La función memmove se usa generalmente para copiar dos bloques de memoria superpuestos . La siguiente función presentará qué es la superposición de memoria y cómo usar memmove.
(2) Implementación de simulación de memcpy
void* My_memcpy(void* destination,const void* source, size_t num)
{
assert(destination);
assert(source);
void* ret = destination;
while (num--)
{
* ((char*)destination)++ = *((char*)source)++;
}
return ret;
}
int main()
{
char arr[18] = "0000000000000000";
char arr1[] = "abcdefg sd a da s da";
printf("%s",My_memcpy(arr,arr1,6));
return 0;
}
resultado de la operación:
2.memmover
void* memmove ( void* destino, const void* fuente, size_t num);
(1) Uso de memmove
memmove también es una función de copia de memoria como memcpy , pero la diferencia es que memmove puede manejar la situación de superposición de memoria ; a continuación, introduciremos la situación de superposición de memoria;
por lo que cuando hay superposición de memoria durante la copia, se debe usar la función memmove para implementarlo.
Ejemplo de código:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "11223344556677";
printf("%s", memmove(arr1, arr1+2, 6));
return 0;
}
resultado de la operación:
(2) Implementación de simulación de memmove
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
void* My_memmove(void* destination,const void* source,size_t num)
{
assert(destination);
assert(source);
void* ret = destination;
if (destination <= source)
{
while (num--)
{
*((char*)destination)++ = *((char*)source)++;
}
}
else
{
while (num--)
{
char* des = (char*)destination + num - 1;
char* sou = (char*)source + num - 1;
*(des) = *(sou);
}
}
return (char*)ret;
}
int main()
{
char arr1[] = "11223344556677";
printf("%s", My_memmove(arr1, arr1+2, 6));
return 0;
}
resultado de la operación:
3.memset
void* memset ( void* ptr, valor int , size_t num);
El uso de memset
memset es la función de inicialización del lenguaje C/C++ en la computadora. La función es establecer todo el contenido de un bloque de memoria en el valor especificado. Esta función generalmente inicializa la memoria recién solicitada. La función es llenar un valor dado en un bloque de memoria, que es la forma más rápida de borrar una estructura o matriz grande.
Ejemplo de código:
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "abcdefg";
memset (str,'-',6);
puts (str);
return 0;
}
resultado de la operación:
4.memcmp
void* memcmp ( const void* ptr1, const void* ptr2, size_t num );
Uso de memcmp
memcmp se utiliza para comparar dos bloques de memoria. Compara el byte numérico anterior del bloque de memoria al que apunta ptr1 con el byte numérico anterior al que apunta ptr2 y devuelve cero si ambos coinciden, o un valor diferente de cero si no coinciden. Indica qué valor es mayor.
valor de retorno | espectáculo |
---|---|
valor de retorno>0 | El primer byte que no coincide en los dos bloques de memoria tiene un valor menor en ptr1 que en ptr2 (si se evalúa como un valor de carácter sin signo) |
valor de retorno = 0 | El contenido de los dos bloques de memoria es igual. |
valor de retorno <0 | El valor del primer byte en ptr1 que no coincide en ambos bloques de memoria es mayor que el valor en ptr2 (si se evalúa como un valor de carácter sin signo) |
Ejemplo de código: |
#include <stdio.h>
#include <string.h>
int main ()
{
char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0";
int n;
n=memcmp ( buffer1, buffer2, sizeof(buffer1) );
if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);
return 0;
}
resultado de la operación:
3. Funciones de los personajes
Cuando utilice funciones de caracteres, debe incluir "#include <ctype.h>"
1. Función de clasificación de personajes
2. Función de conversión de caracteres
int tolower ( int c );
int topper ( int c );
Ejemplo de código:
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = "Test String.\n";
char c;
while (str[i])
{
c = str[i];
if (isupper(c))
c = tolower(c);
putchar(c);
i++;
}
return 0;
}
Nota: No importa lo duro que trabajes, serás lo más especial posible.