Todos sabemos que strcat y strncat son funciones que agregan caracteres a una cadena. ¿Cuál es la diferencia entre ellas? ¿Cuáles son sus principios?
En primer lugar, debemos comprender los principios de los dos para poder distinguirlos;
el uso de la función strcat-call strcat, pasar dos matrices de cadenas o una matriz de cadenas y una cadena, debe llamar al encabezado string.h archivo ;
char arr1[30] = "abcd";
char arr2[] = "efd";
strcat(arr1, arr2);
----------------------
strcat (str,"concatenated.")
El código fuente es (lo implementé yo mismo, será diferente del código fuente real, pero el principio es el mismo)
Paso 1: Apunte el puntero de la cadena agregada a la cadena '\ 0'
Paso 2: Cambie Exchange the cadena de caracteres agregada con el '\ 0' de la cadena de caracteres agregada.
Paso 3: Establezca la última posición de str en '\ 0'
void strcat(char* str, const char* d)
{
while (*str)
str++;
while (*d != '\0')
{
*str = *d;
str++;
d++;
}
str++;
*str = '\0';
}
int main()
{
char arr1[30] = "abcd";
char arr2[] = "efd";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
Uso de strncat-llame a la función strncat, pase dos cadenas y un valor entero, el valor entero representa el número de caracteres que se agregarán, debe llamar al archivo de encabezado string.h;
char str1[20] = "abcde";
char str2[20] = "cdefad";
strncat (str1, str2, 6);
Código fuente:
Paso 1: Mueva el puntero de arr1 a '\ 0'
Paso 2: Cambie el elemento apuntado por arr2 con el elemento apuntado por arr1;
void my_strncat(char* arr1, char* arr2, int len)
{
assert(arr1);
assert(arr2);
arr1 = arr1 + len;
while (len-- != 0)
{
//第一步:先把arr1的指针移到'\0'处
//第二步:把arr2所指向的元素与arr1所指向的元素交换;
*arr1 = *arr2;
arr1++;
arr2++;
}
}
int main()
{
char arr1[30] = "abcdeef";
int len = strlen(arr1);
my_strncat(arr1, arr1, len);
printf("%s\n", arr1);
return 0;
}
Se puede ver claramente que los parámetros de los dos son inconsistentes, pero el efecto es el mismo. La principal diferencia entre los dos es que la condición final de la cadena agregada de strcat () es str2 == '\ 0' (str2 se requiere La cadena agregada); la condición para el final del ciclo de strncat es que el número de cadenas a agregar len sea 0;
Entonces, ¿por qué debería haber dos funciones que logren el mismo efecto?
Parece que el efecto de implementación de los dos es el mismo, pero si desea agregar la cadena original a la cadena original, solo puede usar la función strncat;
char arr1[30] = "abcd";
strcat(arr1, arr1);
Debido a que strcat esencialmente intercambia el '\ 0' de la cadena que se agregará con el elemento de la cadena agregada, entonces, cuando la adición sea en sí, '\ 0' se intercambiará con el elemento anterior, cuando se completen todos los intercambios Más tarde, encontrará que '\ 0' ha ido al fondo de nuevo, por lo que la condición de terminación ya no se establecerá, y caerá en un bucle infinito; la conveniencia de strcat () es que se puede lograr pasando solo dos parámetros, que es relativamente simple;
Sin embargo, se recomienda usar strncat (), porque la posibilidad mencionada anteriormente de caer en un bucle infinito no ocurrirá. Como máximo, se cuenta una longitud de paso más (strlen (nombre de la matriz)), y strncat () tiene un ventaja indispensable, que es la libertad Controlar los personajes a agregar;