Strncat () strncmp ()

InfoQ 2022-07-23 23:14:37 阅读数:319

strncatstrncmp

strncat() - Chaîne de connexion(Limité par la longueur)

**strncat() **
La fonction est déclarée comme suit
 

char *strncat(char *dest, const char *src, size_t n)
Prends ça. 
src
 La chaîne pointée est ajoutée à 
dest
 Fin de la chaîne pointée,Jusqu'à n Jusqu'à la longueur.
dest
→Pointez vers le tableau cible,Le tableau contient un CLangues String,Et assez pour contenir la chaîne ajoutée,Inclure des caractères vides supplémentaires.
src
→Chaîne à ajouter.
n
→Chaîne maximale ajoutée.
Size_t
→Est un symbole non signé(unisgned int)Type entier.
Cette fonction renvoie une chaîne de destination finale 
dest
 Pointeur vers.
Attention!:Le type de pointeur pour la valeur de retour ici peut êtrevoidC'est possible.char *🧨

strncat()Exemple de code de fonction

Utiliser
strncpy()
 Voici un exemple de code de fonction 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
 char str1[20];
 char str2[20];
 strcpy(str1, &quot;Cyuyan&quot;);
 strcpy(str2, &quot;yyds&quot;);
 printf(strncat(str1, str2, 5));//Ajouter une chaîne!
 return 0;
}

Les résultats sont les suivants 
Cyuyanyyds
Venez voir les résultats du débogage ensemble, ce serait peut - être mieux

null

On met&nbsp;
Size_t Le paramètre est changé en④Viens voir.

printf(strncat(str1, str2, 4));
null
Le résultat de l'opération est toujours le même que ci - dessus .

null

strncat() Mise en œuvre du programme source

Voici un exemple de code::

char * __cdecl strncat (
 char * front,
 const char * back,
 size_t count
 )
{
 char *start = front;

 while (*front++)
 ;
 front--;

 while (count--)
 if (!(*front++ = *back++))
 return(start);

 *front = '\0';
 return(start);
}

strncmp() - Comparer les chaînes(Limité par la longueur)

**strncmp() **
La fonction est déclarée comme suit
 

int strncmp(const char *str1, const char *str2, size_t n
str1
&nbsp;→ Première chaîne à comparer.
str2
&nbsp;→ La deuxième chaîne à comparer.
n
&nbsp;→ Nombre maximum de caractères à comparer.
Cette fonction commence à comparer le premier caractère de chaque chaîne .S'ils sont égaux, Continuez avec la paire suivante ,Jusqu'à ce que les caractères soient différents, Jusqu'à ce qu'un caractère vide se termine , Ou jusqu'à ce que numCorrespondance des caractères, Selon ce qui s'est passé en premier .
Si la valeur de retour < 0,Ça veut dire str1 Moins de str2.
Si la valeur de retour > 0,Ça veut dire str2 Moins de str1.
Si la valeur de retour = 0,Ça veut dire str1 égal à str2.

strncmp()Exemple de code de fonction

Utiliser 
strncpy()
 Voici un exemple de code de fonction 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
 char str1[20];
 char str2[20];
 strcpy(str1, &quot;Cyuyan&quot;);
 strcpy(str2, &quot;Cyuyanyyds&quot;);
 printf(&quot;%d&quot;, strncmp(str1, str2, 6));

 return 0;
}

Les résultats sont les suivants 
0 → Représentant****str1 égal à str2
S'il n'y avait pas de chaîne supplémentaire ici, le résultat serait -1,Parce questr1<str2. C'est parce que nous avons ajouté le caractère 6, Ça pourrait être str1 = str2.

strncat() Mise en œuvre du programme source

Voici un exemple de code::

int __cdecl strncmp
(
 const char *first,
 const char *last,
 size_t count
)
{
 size_t x = 0;

 if (!count)
 {
 return 0;
 }

 /*
 * This explicit guard needed to deal correctly with boundary
 * cases: strings shorter than 4 bytes and strings longer than
 * UINT_MAX-4 bytes .
 */
 if( count >= 4 )
 {
 /* unroll by four */
 for (; x < count-4; x+=4)
 {
 first+=4;
 last +=4;

 if (*(first-4) == 0 || *(first-4) != *(last-4))
 {
 return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));
 }

 if (*(first-3) == 0 || *(first-3) != *(last-3))
 {
 return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));
 }

 if (*(first-2) == 0 || *(first-2) != *(last-2))
 {
 return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));
 }

 if (*(first-1) == 0 || *(first-1) != *(last-1))
 {
 return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));
 }
 }
 }

 /* residual loop */
 for (; x < count; x++)
 {
 if (*first == 0 || *first != *last)
 {
 return(*(unsigned char *)first - *(unsigned char *)last);
 }
 first+=1;
 last+=1;
 }

 return 0;
}

Copyright:Cet article est[InfoQ]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/204/202207232312171688.html