作者在 2008-06-30 00:32:09 发布以下内容
今天看了一个syslinux-2.11-1的源代码,
其中有有关字符串处理的几个函数,
这个函数的设计很经典,很值得借鉴。
因此,把它发出来给大家欣赏一下。
void *memset(void *buf, int chr, unsigned int len)
{
asm("cld ; rep ; stosb" : "+D" (buf), "+c" (len) : "a" (chr));
return buf;
}
char *strcpy(char *dst, const char *src)
{
char *r = dst;
char c;
do {
c = *src++;
*dst++ = c;
} while ( c );
return r;
}
char *strcat(char *dst, const char * src)
{
char *r = dst;
while (*dst++); // Find end of string
dst--;
while (*src) *dst++ = *src++; // Append
*dst = '\0'; // Terminate string
return r;
}
int strcmp(const char *a, const char*b)
{
while (*a)
{
if (*a < *b) return -1;
if (*a++ > *b++) return 1;
}
if (*b) return 1; else return 0;
}
int strlen(const char *a)
{
int ans = 0;
while (*a++) ans++;
return ans;
}
其中有有关字符串处理的几个函数,
这个函数的设计很经典,很值得借鉴。
因此,把它发出来给大家欣赏一下。
void *memset(void *buf, int chr, unsigned int len)
{
asm("cld ; rep ; stosb" : "+D" (buf), "+c" (len) : "a" (chr));
return buf;
}
char *strcpy(char *dst, const char *src)
{
char *r = dst;
char c;
do {
c = *src++;
*dst++ = c;
} while ( c );
return r;
}
char *strcat(char *dst, const char * src)
{
char *r = dst;
while (*dst++); // Find end of string
dst--;
while (*src) *dst++ = *src++; // Append
*dst = '\0'; // Terminate string
return r;
}
int strcmp(const char *a, const char*b)
{
while (*a)
{
if (*a < *b) return -1;
if (*a++ > *b++) return 1;
}
if (*b) return 1; else return 0;
}
int strlen(const char *a)
{
int ans = 0;
while (*a++) ans++;
return ans;
}