首先我們來看看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 成對出現的陣列中找出唯一乙個只出現一次的那個數。按位異...