⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.c

📁 jos lab3代码
💻 C
字号:
// Basic string routines.  Not hardware optimized, but not shabby.#include <inc/string.h>intstrlen(const char *s){	int n;	for (n = 0; *s != '\0'; s++)		n++;	return n;}intstrnlen(const char *s, size_t size){	int n;	for (n = 0; size > 0 && *s != '\0'; s++, size--)		n++;	return n;}char *strcpy(char *dst, const char *src){	char *ret;	ret = dst;	while ((*dst++ = *src++) != '\0')		/* do nothing */;	return ret;}char *strncpy(char *dst, const char *src, size_t size) {	size_t i;	char *ret;	ret = dst;	for (i = 0; i < size; i++) {		*dst++ = *src;		// If strlen(src) < size, null-pad 'dst' out to 'size' chars		if (*src != '\0')			src++;	}	return ret;}size_tstrlcpy(char *dst, const char *src, size_t size){	char *dst_in;	dst_in = dst;	if (size > 0) {		while (--size > 0 && *src != '\0')			*dst++ = *src++;		*dst = '\0';	}	return dst - dst_in;}intstrcmp(const char *p, const char *q){	while (*p && *p == *q)		p++, q++;	return (int) ((unsigned char) *p - (unsigned char) *q);}intstrncmp(const char *p, const char *q, size_t n){	while (n > 0 && *p && *p == *q)		n--, p++, q++;	if (n == 0)		return 0;	else		return (int) ((unsigned char) *p - (unsigned char) *q);}// Return a pointer to the first occurrence of 'c' in 's',// or a null pointer if the string has no 'c'.char *strchr(const char *s, char c){	for (; *s; s++)		if (*s == c)			return (char *) s;	return 0;}// Return a pointer to the first occurrence of 'c' in 's',// or a pointer to the string-ending null character if the string has no 'c'.char *strfind(const char *s, char c){	for (; *s; s++)		if (*s == c)			break;	return (char *) s;}void *memset(void *v, int c, size_t n){	char *p;	int m;	p = v;	m = n;	while (--m >= 0)		*p++ = c;	return v;}/* no memcpy - use memmove instead */void *memmove(void *dst, const void *src, size_t n){	const char *s;	char *d;		s = src;	d = dst;	if (s < d && s + n > d) {		s += n;		d += n;		while (n-- > 0)			*--d = *--s;	} else		while (n-- > 0)			*d++ = *s++;	return dst;}/* sigh - gcc emits references to this for structure assignments! *//* it is *not* prototyped in inc/string.h - do not use directly. */void *memcpy(void *dst, void *src, size_t n){	return memmove(dst, src, n);}intmemcmp(const void *v1, const void *v2, size_t n){	const uint8_t *s1 = (const uint8_t *) v1;	const uint8_t *s2 = (const uint8_t *) v2;	while (n-- > 0) {		if (*s1 != *s2)			return (int) *s1 - (int) *s2;		s1++, s2++;	}	return 0;}void *memfind(const void *s, int c, size_t n){	const void *ends = (const char *) s + n;	for (; s < ends; s++)		if (*(const unsigned char *) s == (unsigned char) c)			break;	return (void *) s;}longstrtol(const char *s, char **endptr, int base){	int neg = 0;	long val = 0;	// gobble initial whitespace	while (*s == ' ' || *s == '\t')		s++;	// plus/minus sign	if (*s == '+')		s++;	else if (*s == '-')		s++, neg = 1;	// hex or octal base prefix	if ((base == 0 || base == 16) && (s[0] == '0' && s[1] == 'x'))		s += 2, base = 16;	else if (base == 0 && s[0] == '0')		s++, base = 8;	else if (base == 0)		base = 10;	// digits	while (1) {		int dig;		if (*s >= '0' && *s <= '9')			dig = *s - '0';		else if (*s >= 'a' && *s <= 'z')			dig = *s - 'a' + 10;		else if (*s >= 'A' && *s <= 'Z')			dig = *s - 'A' + 10;		else			break;		if (dig >= base)			break;		s++, val = (val * base) + dig;		// we don't properly detect overflow!	}	if (endptr)		*endptr = (char *) s;	return (neg ? -val : val);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -