天天看點

php 字元串strncpy,strcpy/strncpy/strcat/strncat/memcpy這類庫函數

首先列出這些常用庫函數的函數原型

strcmp

string.h

int strcmp(const char *s1, const char *s2);

負數、零還是正整數,依賴于 s1 所指向的字元串是小于、等于還是大于 s2 所指的字元串。

strncmp

string.h

int strcmp(const char *s1, const char *s2, size_t n);

負整數、零還是正整數,依賴于 s1 所指向的數組的前 n 個字元是小于、等于還是大于s2 所指向的數組的前 n 個字元。如果在其中某個數組中遇到空字元,比較都會停止。

strcpy

string.h

char *strcpy(char * dst, const char * src);

傳回dst指向目的的指針。

函數原型:

char *strcpy(char *dst, const char *src)

{

assert((dst != NULL) && (src != NULL));

char * tmpdst = dst;

if (dst == src) {

return dst;

}

while(((*dst++) = (*src++) != '\0')) {

NULL;

}

return tmpdst;

}

strncpy

string.h

char *strncpy(char * dst, const char * src, size_t n);

傳回dst指向目的的指針。

strcat

string.h

char *strcat(char * dst, const char * src);

strcat() 會将參數 src 字元串複制到參數 dest 所指的字元串尾部;dest 最後的結束字元 NULL 會被覆寫掉,并在連接配接後的字元串的尾部再增加一個 NULL。傳回dest 字元串起始位址.

strncat

string.h

char *strcat(char *dst, const char * src, size_t n);

同上,隻是追加n個字元。

strlen

string.h

size_t strlen(const char * s);

傳回字元串長度,以\0截止(不包括\0)。

sizeof

sizeof(類型說明符);

sizeof 表達式;

傳回的是所占的記憶體空間;

strlen和sizeof的差別,前者計算字元串的真實長度,後者計算說明符所占記憶體空間。

FEP:#include

#include

int main(void) {

char a[20] = "0123456789";

printf("%d %d\n", sizeof(a), strlen(a));

}

結果是20,10

又或者#include

#include

int main(void) {

int a[20] = {};

printf("%d %d\n", sizeof(a), strlen(a));

}

結果是80,0

memcmp

string.h

int memcpy(const char* s1, const char *s2, size_t n);

負整數、零還是正整數依賴于 s1 所指向對象的前 n 個字元是小于、等于還是大于 s2 所指向對象的前 n 個字元。

memset

string.h

void *memset(void *s, int c, size_t n);

指向記憶體塊s的指針。

函數實作:void* memset(void* dst,int val, size_t count)

{

void* ret = dst; //用ret指針來儲存dst的位址

while(count--)

{

*(char*)dst = (char)val;

dst = (char*)dst + 1; //移動一個位元組

}

return ret;

}

memcpy

string.h

void* memcpy(char * dst, const char* src, size_t n);

傳回s1指針。

函數實作:void* memcpy(char * dst, const char* src, size_t n)

{

if ((dst == NULL) && (src == NULL)) {

return -1;

}

unsigned char *dst1 = (unsigned char*) dst;

unsigned char *src1 = (unsigned char*) src;

while(n--) {

*dst1 = *src1;

dst1++;

src1++;

}

return dst1;

}