1. 程式人生 > 其它 >實現C語言一些庫函式

實現C語言一些庫函式

技術標籤:c語言程式語言

1、關於strlen

//strlen()庫函式的範圍型別是size_t
//size_t == unsigned int

int main()
{
	//3-6=-3,但是在無符號整型下,取值範圍為0-255,故3-6>0
	if (strlen("abc") - strlen("abcdef") > 0)
	{
		printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

2、實現strcpy()函式

//此函式的返回型別是char*

        //const保證str2作為被複制的字串不能被修改
char* my_strcpy(char* dest, const char* src)
{
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;

	//while (*str2 != '\0')
	//{
	//	*str1 = *str2;
	//	str1++;
	//	str2++;
	//}
	//*str1 = *str2;//為了將\0複製到str1字串中

	//上述迴圈等同於:

	//拷貝src指向的字串到dest指向的空間,包含'\0'
	while ((*dest++) =
(*src++)) { ; } //返回dest,即目的空間的起始地址 return ret; } int main() { char arr1[] = "abcdef"; char arr2[] = "bit"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }

3、實現strcat()函式

char* my_strcat(char* dest, const char* src)
{
	assert(dest != NULL);
	assert(src !=
NULL); char* ret = dest; //1、找到dest字串\0的位置 while (*dest != '\0') { dest++; } //2.找到dest字串\0位置後,在其之後追加src字串 while (*dest++ = *src++) { ; } //3、返回dest,即目的空間的起始地址 return ret; } int main() { char arr1[30] = "abcdef"; char arr2[] = "bit"; my_strcat(arr1, arr2); printf("%s\n", arr1); return 0; }

4、實現strcmp()函式

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1&&str2);

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;  //判斷兩個字串相等
		}
		str1++;
		str2++;
	}

	/*if (*str1 < *str2)
	{
		return -1;
	}
	else
	{
		return 1;
	}*/
	
	//上述註釋的if語句等同於如下一行程式碼
	return (*str1 - *str2);
}

int main()
{
	char* p1 = "abcdef";
	char* p2 = "abcdef";
	int ret = my_strcmp(p1, p2);
	if (ret > 0)
	{
		printf("p1>p2\n");
	}
	else if (ret == 0)
	{
		printf("p1=p2\n");
	}
	else
	{
		printf("p1<p2\n");
	}
	return 0;
}