Nous savons tous que strcat et strncat sont tous deux des fonctions qui ajoutent des caractères à une chaîne. Quelle est la différence entre eux? Quels sont leurs principes?
Tout d'abord, nous devons comprendre les principes des deux pour pouvoir les distinguer;
l'utilisation de la fonction strcat-call strcat, passer deux tableaux de chaînes ou un tableau de chaînes et une chaîne, vous devez appeler l'en-tête string.h fichier ;
char arr1[30] = "abcd";
char arr2[] = "efd";
strcat(arr1, arr2);
----------------------
strcat (str,"concatenated.")
Le code source est (je l'ai implémenté moi-même, il sera différent du code source réel, mais le principe est le même)
Étape 1: Pointez le pointeur de la chaîne ajoutée vers la chaîne '\ 0'
Étape 2: Changez Echangez le chaîne de caractères ajoutée avec le «\ 0» de la chaîne de caractères ajoutée.
Étape 3: définissez la dernière position de str sur «\ 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;
}
Utilisation de strncat-appelez la fonction strncat, passez deux chaînes et une valeur entière, la valeur entière représente le nombre de caractères à ajouter, vous devez appeler le fichier d'en-tête string.h;
char str1[20] = "abcde";
char str2[20] = "cdefad";
strncat (str1, str2, 6);
Code source:
Étape 1: Déplacez le pointeur de arr1 vers «\ 0»
Étape 2: Échangez l'élément pointé par arr2 avec l'élément pointé par 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;
}
On peut clairement voir que les paramètres des deux sont incohérents, mais l'effet est le même. La principale différence entre les deux est que la condition de fin de la chaîne ajoutée de strcat () est str2 == '\ 0' (str2 est obligatoire La chaîne ajoutée); la condition pour la fin de la boucle de strncat est que le nombre de chaînes à ajouter len soit 0;
Alors pourquoi devrait-il y avoir deux fonctions qui produisent le même effet?
Il semble que l'effet d'implémentation des deux soit le même, mais si vous souhaitez ajouter la chaîne d'origine à la chaîne d'origine, vous ne pouvez utiliser que la fonction strncat;
char arr1[30] = "abcd";
strcat(arr1, arr1);
Parce que strcat échange essentiellement le '\ 0' de la chaîne à ajouter avec l'élément de la chaîne ajoutée, alors lorsque l'ajout est lui-même, '\ 0' sera échangé avec l'élément précédent, lorsque tous les échanges seront terminés Plus tard, vous trouvera que '\ 0' est retourné à l'arrière, de sorte que la condition de terminaison ne sera plus établie, et vous tomberez dans une boucle infinie; la commodité de strcat () est qu'elle peut être obtenue en passant seulement deux paramètres, ce qui est relativement simple;
Cependant, il est recommandé d'utiliser strncat (), car la possibilité mentionnée ci-dessus de tomber dans une boucle infinie ne se produira pas. Au plus, une longueur de pas supplémentaire (strlen (nom du tableau)) est comptée, et strncat () a un avantage indispensable, qui est la liberté Contrôler les caractères à ajouter;