My Project
Chargement...
Recherche...
Aucune correspondance
string.c
Aller à la documentation de ce fichier.
1/*----------------------------------------------------------------------------*/
2/* Implantation des fonctions de manipulation des chaines. */
3/* */
4/* (C) Manu Chaput 2000-2021 */
5/*----------------------------------------------------------------------------*/
6#include "manux/stddef.h"
7#include <manux/string.h>
8
12void * memcpy(void *dest, const void *src, size_t n)
13{
14 char * d = dest;
15 const char * s = src;
16 while (n--)
17 *d++ = *s++;
18
19 return dest;
20}
21
25void * memset(void *dest, int val, size_t n)
26{
27 char * d = dest;
28 while (n--)
29 *d++ = val;
30
31 return dest;
32}
33
34
35void bcopy (const void *src, void *dest, int n)
36/*
37 * bcopy/bzero ne sont ni ISO C ni POSIX (deprecated depuis 2001 et removed en 2008)
38 */
39{
40 char * d = dest;
41 const char * s = src;
42 while (n--)
43 *d++ = *s++;
44}
45
46int strlen(const char * s)
47{
48 int result = 0;
49
50 while (s[result]) {
51 result++;
52 }
53
54 return result;
55}
56
57int strncmp(const char *s1, const char *s2, size_t n)
58{
59 size_t i;
60
61 // On cherche la première différence
62 for (i = 0 ; (i < n) && (s1[i] == s2[i]) ; i++) { }
63
64 // Si on n'en a pas trouvé, c'est égalité, sinon on compare
65 if (i == n) {
66 return 0;
67 } else if (s1[i] < s2[i]) {
68 return -1;
69 } else {
70 return +1;
71 }
72}
73
74int strcmp(const char *s1, const char *s2)
75{
76 int l1 = strlen(s1);
77 int l2 = strlen(s2);
78 int l = l1;
79 int result;
80
81 if (l2 < l) {
82 l = l2;
83 }
84
85 result = strncmp(s1, s2, l);
86
87 // Si elles sont égales sur la longueur commune
88 if (result == 0) {
89 if (l1 < l2) {
90 return -1;
91 } else if (l2 < l1) {
92 return +1;
93 }
94 }
95 return result;
96}
97
104char * prochainDelimiteur(char * chaine, char delimiteur)
105{
106 char * result = chaine;
107
108 while ((*result != 0) && (*result != delimiteur)) {
109 result ++;
110 }
111 return result;
112}
uint16_t d
int strncmp(const char *s1, const char *s2, size_t n)
Definition string.c:57
int strcmp(const char *s1, const char *s2)
Definition string.c:74
int strlen(const char *s)
Definition string.c:46
void bcopy(const void *src, void *dest, int n)
Definition string.c:35
void * memset(void *dest, int val, size_t n)
Definition string.c:25
void * memcpy(void *dest, const void *src, size_t n)
Definition string.c:12
char * prochainDelimiteur(char *chaine, char delimiteur)
Recherche d'un délimiteur dans une chaîne.
Definition string.c:104