cstring頭文件函數解析


原創作品,轉載請注明來源:http://www.cnblogs.com/shrimp-can/p/5643829.html 

在使用由字符數組或指針組成的字符串的時候,要用到一些函數,這些函數通常包含在頭文件ctring中,以下是這個頭文件中的函數的解析。

一、拷貝相關函數:

memcpy:void* memcpy(void* destination,const void* source, size_t num)

從source指向的地址拷貝num bytes到destination指向的地址。不檢查source中的空字符,總是拷貝num bytes,可能產生溢出,當destination和source的大小小於num時。

memmove:void* memmove(void* destination,const void* source, size_t num)

從source指向的地址拷貝num bytes到destination指向的地址。常用於同一字符串的改變。不檢查source中的空字符,總是拷貝num bytes,可能產生溢出,當destination和source的大小小於num時。

char str[] = "memmove can be very useful......";
memmove (str+20,str+15,11);
puts(str);

輸出為:memmove can be very very useful.

strcpy:char * strcpy ( char * destination, const char * source )

將source指向的字符串拷貝到destination指向的地方。會檢查空字符,遇空字符停止(字符串結束標志)。可能存在溢出。

strncpychar * strncpy ( char * destination, const char * source, size_t num )

 

將source指向的字符串拷貝到destination指向的地方,最多拷貝num bytes,或者遇到空字符(字符串結束標志)停止。num可以防止溢出。

 

二、連接相關函數:

strcat:char * strcat ( char * destination, const char * source )

將source指向的字符串連接到destination指向的字符串的后面。可能存在溢出,當連接后的大小大於destination的大小。

 

 char str[80];
 strcpy (str,"these ");
 strcat (str,"strings ");
 strcat (str,"are ");
 strcat (str,"concatenated.");
 puts (str);

 

輸出為:these strings are concatenated.

strncatchar * strncat ( char * destination, const char * source, size_t num )

將source指向的字符串連接到destination指向的字符串的后面。最多連接num bytes。

 

三、比較相關函數:

memcmp:int memcmp ( const void * ptr1, const void * ptr2, size_t num )

比較ptr1、ptr2指向的內存塊的前面num bytes,如果都相同則返回0,如果第一個不同byte ptr1的小於ptr2的,返回負數,否則返回正數。如果前面都相同,即使中間遇到空字符,也會繼續比較下去,直到比較完所有的num bytes。

char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0"; 
int n; n=memcmp ( buffer1, buffer2, sizeof(buffer1) ); if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2); else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2); else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);

輸出為:'DWgaOtP12df0' is greater than 'DWGAOTP12DF0'.

strcmp:int strcmp ( const char * str1, const char * str2 );

比較str1、str2指向的字符串,直到遇到不相同的字符或者空字符結束。如果都相同則返回0,如果第一個不同byte ptr1的小於ptr2的,返回負數,否則返回正數。

strncmp:int strncmp ( const char * str1, const char * str2, size_t num )

比較ptr1、ptr2指向的字符串,直到遇到不相同的字符或者空字符結束或者比較完前面的num bytes結束。如果都相同則返回0,如果第一個不同byte ptr1的小於ptr2的,返回負數,否則返回正數。

 

strcollint strcoll ( const char * str1, const char * str2 )

 

比較str1、str2指向的字符串,直到遇到不相同的字符或者空字符結束。如果都相同則返回0,如果第一個不同byte ptr1的小於ptr2的,返回負數,否則返回正數。函數的行為決定於所選擇的c語言環境中的LC_CALLATE類別(用的比較少)

strxfrmsize_t strxfrm ( char * destination, const char * source, size_t num )

 

傳輸source指向的字符串到當前環境,然后拷貝前面num bytes字符到destination指向的地方,返回傳輸的字符串的長度,不包含空字符。函數的行為決定於所選擇的c語言環境中的LC_CALLATE類別(用的比較少)

 

四、檢索相關函數:

memchr:const void * memchr ( const void * ptr, int value, size_t num );

               void * memchr ( void * ptr, int value, size_t num );

 

在ptr指向的內存中的前num bytes中搜索值value,返回第一個value的指針,如果沒有找到返回空指針。

char * pch;
char str[] = "Example string";
pch = (char*) memchr (str, 'p', strlen(str));
if (pch!=NULL)
    printf ("'p' found at position %d.\n", pch-str+1);
else
    printf ("'p' not found.\n");

輸出:'p' found at position 5.

strchr:const char * strchr ( const char * str, int character );

           char * strchr ( char * str, int character );

在ptr指向的字符串中搜索值value,返回第一個value的指針,如果沒有找到返回空指針。

strcspn:size_t strcspn ( const char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意一個字符,返回找到的第一個字符前面的字符數,如果沒有找到返回str1指向的字符串的字符數。

char str[] = "fcba73";
char keys[] = "1234567890";
int i;
i = strcspn (str,keys);
printf ("The first number in str is at position %d.\n",i+1);

輸出:The first number in str is at position 5

strpbrk:const char * strpbrk ( const char * str1, const char * str2 );

             char * strpbrk ( char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意一個字符,返回找到的第一個字符的指針,如果沒有找到返回空指針。

 char str[] = "This is a sample string";
  char key[] = "aeiou";
  char * pch;
  printf ("Vowels in '%s': ",str);
  pch = strpbrk (str, key);
  while (pch != NULL)
  {
    printf ("%c " , *pch);
    pch = strpbrk (pch+1,key);
  }

輸出:Vowels in 'This is a sample string': i i a a e i

strrchr:const char * strrchr ( const char * str, int character );

            char * strrchr ( char * str, int character );

在ptr指向的字符串中搜索值character,返回最后一個character的指針,如果沒有找到返回字符串結束處的指針。

strspn:size_t strspn ( const char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意字符,返回找到的字符個數。不包含空字符。

 char strtext[] = "129th";
  char cset[] = "1234567890";
  i = strspn (strtext,cset);
  printf ("The initial number has %d digits.\n",i);

輸出:The initial number has 3 digits.

strstr:const char * strstr ( const char * str1, const char * str2 );

          char * strstr ( char * str1, const char * str2 );

在str1指向的字符串中查找str2指向的字符串,返回找到的第一次出現位置的指針,若沒找到,返回空指針。

strtok:char * strtok ( char * str, const char * delimiters );

將str指向的字符串進行划分,delimiters指向的字符串的任意字符都是一個分割點。第一次調用,起始位置為字符串的開始,后面的調用,用NULL指針來替代str,代表從上一次分割處開始。如果找到分割點,返回起始位置的指針,否則返回空指針。

 char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }

輸出:

Splitting string "- This, a sample string." into tokens:
This
a
sample
string

五、其他函數

memset:void * memset ( void * ptr, int value, size_t num );

設置ptr指向的內存的前面num bytes的值為value

 char str[] = "almost every programmer should know memset!";
  memset (str,'-',6);
  puts (str);

輸出:------ every programmer should know memset!

strerror:char * strerror ( int errnum );

將參數設置為erro,將返回描述錯誤的字符串

  FILE * pFile;
  pFile = fopen ("unexist.ent","r");
  if (pFile == NULL)
  printf ("Error opening file unexist.ent: %s\n",strerror(errno));

輸出:Error opening file unexist.ent: No such file or directory

strlen:size_t strlen ( const char * str );

返回str指向字符串的長度,不包含空字符

參考文獻:http://www.cplusplus.com/reference/cstring/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM