字串函式的實現(第一波)

2021-07-16 16:08:35 字數 2964 閱讀 1148

首先我們來看看msdn庫里函式的大概模型

strcpy函式的功能就是字串拷貝,

我們可以用指標移動賦值來實現

一直到『\0』停止

根據函式功能我們可以寫出如下**

#define _crt_secure_no_warnings 1

#include

#include

char *my_strcpy(char *dest, const

char *src)

return cp;

}int main()

下來我們來看看庫里函式的源**,發現和我們寫的幾乎沒有什麼區別

strcpy:

1./*

2. * strcpy - copy a %nul terminated string

3. * @dest: where to copy the string to

4. * @src: where to copy the string from

5. */

6.char *strcpy(char *dest, const char *src)

7.

觀察源**你會發現,strcpy函式沒有判斷是否越界的步驟,所以在用這個函式時

要注意字串長度和目標字串空間大小。

因為字串拷貝函式strcpy安全性不好,所以就有了strncpy

它是幹什麼的哪?

函式字串拷貝,只不過比strcpy多了乙個引數就是拷貝個數

這樣我們就用把判斷條件稍加修改就可以了

先看看msdn中

#define _crt_secure_no_warnings 1

#include

#include

char *my_strncpy(char *dest, const char *src,int

count)//const 可以讓**具有更好的健壯性

if (count != 0)

return cp;

}int main()

下面我們來看看庫里的源**

char * __cdecl strncpy (

char * dest,

const char * source,

size_t count

)

本質上沒有什麼區別

字串追加函式

因為是追加函式所以要先找到目標字串的『\0』,然後在指標偏移進行賦值就可以了

#define _crt_secure_no_warnings 1

#include

#include

char *my_strcat(char *dest, const char *src)

while (*dest++ = *src++)

return tem;

}int main()

strcat源**:

char * __cdecl strcat (

char * dst,

const

char * src

)

msdn中:

和strcat差不多,只是在strcat的基礎上再加乙個追加個數的限定條件

#define _crt_secure_no_warnings 1

#include

#include

char *my_strncat(char *dest, const char *src,int count)

while (count--&&(*dest++ = *src++))

return tem;

}int main()

下面是庫函式源**:

還是用指標移動來實現,指標移動直到遇到『\0』為止,再來乙個簡單的計數器就可以求出字串長度。

#define _crt_secure_no_warnings 1

#include

#include

int my_strlen(const char *str)

return

count;

}int main()

strlen庫函式源**:

size_t __cdecl strlen (

const

char * str

)

可以看到strlen返回的是乙個siez_t型別的值,這個型別實在標頭檔案stddef.h中定義的,是乙個無符號整數型別所以

if( ( strlen( x ) - strlen( y ) ) >=0)這樣的表示式是不對的,因為strlen返回的是無符號型別值,所以》=左邊是乙個無符號型別的值,而無符號的值不可能為負的,所以這裡條件恆成立。

這裡可以看到庫函式中沒有用計數器來乙個 乙個加,而是直接用指向『\0』位址減去指向首元素的位址再減去1

在c中只能相同型別指標指向的位址能進行減法運算,算出來的是中間相隔的元素個數+1

春運第一波

感謝天氣,昨天沒有太陽沒有下雨,讓我們圓滿地完成了今年春季第一次運動。雖說也不是什麼值得大聲鼓吹和令人驚喜的事情,但每段時間能徒步一次,感受一下黃土和綠樹,感受一下身體的機能和心情的放鬆,是生活中一種不錯的體驗。我們不一定要是徒步的狂熱愛好者,不必擁有專業的裝備,不必懷有提公升什麼的目的,只須有點時...

linux 命令 第一波

man 命令名字 檢視命令詳細解釋 q退出 cd 切換目錄 cd 回到上級目錄 su 切換使用者 pwd 當前目錄 mkdir cmy 建立cmy資料夾 目錄 rm cmy 刪除cmy資料夾 如果cmy裡面有子檔案或子資料夾不讓刪除 rm cmy rf 刪除cmy及其裡面的子資料夾及子檔案 mv 重...

C 筆試題第一波

include using namespace std 把指定的位置為0或者1。int grial int x,int n,int flags else return x int main include using namespace std 成對出現的陣列中找出唯一乙個只出現一次的那個數。按位異...