青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

唐吉訶德

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  5 Posts :: 75 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

~對初學者屬于深入理解吧,高手請勿在此浪費寶貴時間~

看到這樣一個改錯題:
char p[5]; 
char* s="12345"
strcpy(p,s);
   cout << p << endl;
錯誤之處是很顯然的,作為字符串字面值的"12345"會在結尾處自動加上空字符null,從而長度是6,上面的strcpy是會越界的,從而是個越界錯誤。
問題是我以為這樣的程序編譯的時候會出錯呢!但是我在vc上運行時是可以輸出正確結果的,這讓我很是納悶!后來找到了strcpy的源代碼才知原因,strcpy函數是不進行越界處理的. 又因為strcpy連null一起復制,從而p能輸出正確的結果"12345"
/*The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination. No overflow checking is performed when strings are copied or appended. The behavior of strcpy is undefined if the source and destination strings overlap.*/
char * __cdecl strcpy(char * dst, const char * src) 

char * cp = dst; 

while*cp++ = *src++ ) 
/* Copy src over dst */ 

return( dst ); 
}
 
貌似strcpy雖然不進行越界處理,仍然是個挺好的函數呢,但是注意了,下面的代碼就能暴露出strcpy 的缺點了.
char p[5];
char *= "12345678";
strcpy(p,s);
cout 
<< p <<endl; //輸出12345678,而不是我們所設想的12345
為了不因不知s的長度而犯下錯誤,推薦使用strncpy。但是是不是用了strncpy就萬無一失了呢?看下面的代碼:
char p[5];
char* s = "12345";
strncpy(p,s,
5);
cout 
<< p <<endl; //12345*&^(后面表示亂碼)
不是都限制個數了么?為什么后面又有亂碼?
問題來自在上述情形strncpy是不會復制字符串s后面的null的,不是以null結束的p不會輸出正確結果的。
仍然給出strncpy的源代碼:
/*The strncpy function copies the initial count characters of strSource to strDest and returns strDest. If count is less than or equal to the length of strSource, a null character is not appended automatically to the copied string. If count is greater than the length of strSource, the destination string is padded with null characters up to length count. The behavior of strncpy is undefined if the source and destination strings overlap.*/
char * __cdecl strncpy ( char * dest, const char * source, size_t count ) 

char *start = dest; 

while (count && (*dest++ = *source++)) /* copy string */ 
count
--

if (count) /* pad out with zeroes */ 
while (--count) 
*dest++ = '\0'

return(start); 
}
 
那strncpy這么不穩定,為何用它?strncpy經常用于修改一個長字符串中間的一部分(看出不復制null的原因了吧!),如果實在要用到上述的代碼上,就在代碼最后加上p[5] = '\0'; 吧!

函數名: stpcpy
功  能: 拷貝一個字符串到另一個
用  法: char *stpcpy(char *destin, char *source);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char string[10];
   char *str1 = "abcdefghi";
   stpcpy(string, str1);
   printf("%sn", string);
   return 0;
}
 
 
 
函數名: strcat
功  能: 字符串拼接函數
用  法: char *strcat(char *destin, char *source);
程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char destination[25];
   char *blank = " ", *c = "C++", *Borland = "Borland";
   strcpy(destination, Borland);
   strcat(destination, blank);
   strcat(destination, c);
   printf("%sn", destination);
   return 0;
}
 
 
 
函數名: strchr
功  能: 在一個串中查找給定字符的第一個匹配之處
用  法: char *strchr(char *str, char c);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
    char string[15];
    char *ptr, c = 'r';
    strcpy(string, "This is a string");
    ptr = strchr(string, c);
    if (ptr)
       printf("The character %c is at position: %d\n", c, ptr-string);// 不明白 
    else
       printf("The character was not foundn");
    return 0;
}
 
 
 
函數名: strcmp
功  能: 串比較
用  法: int strcmp(char *str1, char *str2);
看Asic碼,str1>str2,返回值 > 0;兩串相等,返回0

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
    char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
    int ptr;
    ptr = strcmp(buf2, buf1);
    if (ptr > 0)
       printf("buffer 2 is greater than buffer 1n");
    else
       printf("buffer 2 is less than buffer 1n");
    ptr = strcmp(buf2, buf3);
    if (ptr > 0)
       printf("buffer 2 is greater than buffer 3n");
    else
       printf("buffer 2 is less than buffer 3n");
    return 0;
}
 
 
 
函數名: strncmpi
功  能: 將一個串中的一部分與另一個串比較, 不管大小寫
用  法: int strncmpi(char *str1, char *str2, unsigned maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *buf1 = "BBB", *buf2 = "bbb";
   int ptr;
   ptr = strcmpi(buf2, buf1);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   if (ptr < 0)
      printf("buffer 2 is less than buffer 1n");
   if (ptr == 0)
      printf("buffer 2 equals buffer 1n");
   return 0;
}
 
 
 
函數名: strcpy
功  能: 串拷貝
用  法: char *strcpy(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
    char string[10];
    char *str1 = "abcdefghi";
    strcpy(string, str1);
    printf("%sn", string);
    return 0;
}
 
 
 
函數名: strcspn
功  能: 在串中查找第一個給定字符集內容的段
用  法: int strcspn(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
    char *string1 = "1234567890";
    char *string2 = "747DC8";
    int length;
    length = strcspn(string1, string2);
    printf("Character where strings intersect is at position %dn", length);
    return 0;
}
 
 
 
函數名: strdup
功  能: 將串拷貝到新建的位置處
用  法: char *strdup(char *str);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
    char *dup_str, *string = "abcde";
    dup_str = strdup(string);
    printf("%sn", dup_str);
    free(dup_str);
    return 0;
}
 
 
 
函數名: stricmp
功  能: 以大小寫不敏感方式比較兩個串
用  法: int stricmp(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *buf1 = "BBB", *buf2 = "bbb";
   int ptr;
   ptr = stricmp(buf2, buf1);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   if (ptr < 0)
      printf("buffer 2 is less than buffer 1n");
   if (ptr == 0)
      printf("buffer 2 equals buffer 1n");
   return 0;
}
 
 
函數名: strerror
功  能: 返回指向錯誤信息字符串的指針
用  法: char *strerror(int errnum);

程序例:
#include <stdio.h>
#include <errno.h>
int main(void)
{
   char *buffer;
   buffer = strerror(errno);
   printf("Error: %sn", buffer);
   return 0;
}
 
 
 
函數名: strcmpi
功  能: 將一個串與另一個比較, 不管大小寫
用  法: int strcmpi(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *buf1 = "BBB", *buf2 = "bbb";
   int ptr;
   ptr = strcmpi(buf2, buf1);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   if (ptr < 0)
      printf("buffer 2 is less than buffer 1n");
   if (ptr == 0)
      printf("buffer 2 equals buffer 1n");
   return 0;
}
 
 
 
函數名: strncmp
功  能: 串比較
用  法: int strncmp(char *str1, char *str2, int maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int  main(void)
{
   char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";
   int ptr;
   ptr = strncmp(buf2,buf1,3);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   else
      printf("buffer 2 is less than buffer 1n");
   ptr = strncmp(buf2,buf3,3);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 3n");
   else
      printf("buffer 2 is less than buffer 3n");
   return(0);
}
 
 
函數名: strncmpi
功  能: 把串中的一部分與另一串中的一部分比較, 不管大小寫
用  法: int strncmpi(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *buf1 = "BBBccc", *buf2 = "bbbccc";
   int ptr;
   ptr = strncmpi(buf2,buf1,3);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   if (ptr < 0)
      printf("buffer 2 is less than buffer 1n");
   if (ptr == 0)
      printf("buffer 2 equals buffer 1n");
   return 0;
}
 
 
函數名: strncpy
功  能: 串拷貝
用  法: char *strncpy(char *destin, char *source, int maxlen);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char string[10];
   char *str1 = "abcdefghi";
   strncpy(string, str1, 3);
   string[3] = '';
   printf("%sn", string);
   return 0;
}
 
 
函數名: strnicmp
功  能: 不注重大小寫地比較兩個串
用  法: int strnicmp(char *str1, char *str2, unsigned maxlen);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *buf1 = "BBBccc", *buf2 = "bbbccc";
   int ptr;
   ptr = strnicmp(buf2, buf1, 3);
   if (ptr > 0)
      printf("buffer 2 is greater than buffer 1n");
   if (ptr < 0)
      printf("buffer 2 is less than buffer 1n");
   if (ptr == 0)
      printf("buffer 2 equals buffer 1n");
   return 0;
}
 
 
 
函數名: strnset
功  能: 將一個串中的所有字符都設為指定字符
用  法: char *strnset(char *str, char ch, unsigned n);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *string = "abcdefghijklmnopqrstuvwxyz";
   char letter = 'x';
   printf("string before strnset: %sn", string);
   strnset(string, letter, 13);
   printf("string after  strnset: %sn", string);
   return 0;
}
 
 
函數名: strpbrk
功  能: 在串中查找給定字符集中的字符
用  法: char *strpbrk(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *string1 = "abcdefghijklmnopqrstuvwxyz";
   char *string2 = "onm";
   char *ptr;
   ptr = strpbrk(string1, string2);
   if (ptr)
      printf("strpbrk found first character: %cn", *ptr);
   else
      printf("strpbrk didn't find character in setn");
   return 0;
}
 
 
 
函數名: strrchr
功  能: 在串中查找指定字符的最后一個出現
用  法: char *strrchr(char *str, char c);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char string[15];
   char *ptr, c = 'r';
   strcpy(string, "This is a string");
   ptr = strrchr(string, c);
   if (ptr)
      printf("The character %c is at position: %dn", c, ptr-string);
   else
      printf("The character was not foundn");
   return 0;
}
 
 
 
函數名: strrev
功  能: 串倒轉
用  法: char *strrev(char *str);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char *forward = "string";
   printf("Before strrev(): %sn", forward);
   strrev(forward);
   printf("After strrev():  %sn", forward);
   return 0;
}
 
函數名: strset
功  能: 將一個串中的所有字符都設為指定字符
用  法: char *strset(char *str, char c);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char string[10] = "123456789";
   char symbol = 'c';
   printf("Before strset(): %sn", string);
   strset(string, symbol);
   printf("After strset():  %sn", string);
   return 0;
}
 
 
 
函數名: strspn
功  能: 在串中查找指定字符集的子集的第一次出現
用  法: int strspn(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
   char *string1 = "1234567890";
   char *string2 = "123DC8";
   int length;
   length = strspn(string1, string2);
   printf("Character where strings differ is at position %dn", length);
   return 0;
}
 
 
函數名: strstr
功  能: 在串中查找指定字符串的第一次出現
用  法: char *strstr(char *str1, char *str2);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *str1 = "Borland International", *str2 = "nation", *ptr;
   ptr = strstr(str1, str2);
   printf("The substring is: %sn", ptr);
   return 0;
}
 
 
函數名: strtod
功  能: 將字符串轉換為double型值
用  法: double strtod(char *str, char **endptr);
程序例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char input[80], *endptr;
   double value;
   printf("Enter a floating point number:");
   gets(input);
   value = strtod(input, &endptr);
   printf("The string is %s the number is %lfn", input, value);
   return 0;
}
 
 
 
函數名: strtok
功  能: 查找由在第二個串中指定的分界符分隔開的單詞
用  法: char *strtok(char *str1, char *str2);

程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
   char input[16] = "abc,d";
   char *p;
   /* strtok places a NULL terminator
   in front of the token, if found */
   p = strtok(input, ",");
   if (p)   printf("%sn", p);
   /* A second call to strtok using a NULL
   as the first parameter returns a pointer
   to the character following the token  */
   p = strtok(NULL, ",");
   if (p)   printf("%sn", p);
   return 0;
}
 
 
 
函數名: strtol
功  能: 將串轉換為長整數
用  法: long strtol(char *str, char **endptr, int base);

程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
   char *string = "87654321", *endptr;
   long lnumber;
   /* strtol converts string to long integer  */
   lnumber = strtol(string, &endptr, 10);
   printf("string = %s  long = %ldn", string, lnumber);
   return 0;
}
 
函數名: strupr
功  能: 將串中的小寫字母轉換為大寫字母
用  法: char *strupr(char *str);

程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;
   /* converts string to upper case characters */
   ptr = strupr(string);
   printf("%sn", ptr);
   return 0;
}
 
 
 
函數名: swab
功  能: 交換字節
用  法: void swab (char *from, char *to, int nbytes);

程序例:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char source[15] = "rFna koBlrna d";
char target[15];
int main(void)
{
   swab(source, target, strlen(source));
   printf("This is target: %sn", target);
   return 0;
}



PS:isalpha()是字符函數,不是字符串函數,

isalpha
 


  原型:extern int isalpha(int c);
 
  用法:#include <ctype.h>
 
  功能:判斷字符c是否為英文字母
 
  說明:當c為英文字母a-z或A-Z時,返回非零值,否則返回零

 
  舉例:

      // isalpha.c
     
      #include <syslib.h>
      #include <ctype.h>
      #include <stdio.h>

      main()
      {
        int c;
       
        clrscr();        // clear screen
        printf("Press a key");
        for(;;)
        {
          c=getchar();
          clrscr();
          printf("%c: %s letter",c,isalpha(c)?"is":"not");
        }
        return 0; // just to avoid warnings by compiler
      }

posted on 2010-04-25 02:07 心羽 閱讀(441) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            黄色成人精品网站| 在线成人激情视频| 在线亚洲自拍| 一区二区免费在线播放| 欧美日韩亚洲一区二区| 99这里只有久久精品视频| 亚洲另类自拍| 国产精品天天看| 久久久综合网| 麻豆久久精品| 9久re热视频在线精品| 一本色道久久综合精品竹菊| 国产精品久久久久久久电影| 久久本道综合色狠狠五月| 欧美中文字幕不卡| 亚洲经典视频在线观看| 亚洲精品一级| 国产日韩欧美高清免费| 久久亚洲综合| 欧美日韩1区| 久久精品在线免费观看| 麻豆91精品91久久久的内涵| 99国产精品视频免费观看一公开| 国产精品99久久99久久久二8| 国产欧美日韩一区二区三区| 免费视频一区| 欧美香蕉视频| 久久综合色播五月| 欧美日韩三级视频| 久久久人成影片一区二区三区| 欧美成人精品激情在线观看| 午夜国产不卡在线观看视频| 免费不卡视频| 久久成人羞羞网站| 欧美久久成人| 久久综合婷婷| 国产精品尤物福利片在线观看| 欧美成人精品不卡视频在线观看| 欧美视频中文一区二区三区在线观看| 裸体歌舞表演一区二区| 欧美婷婷久久| 亚洲电影下载| 国产小视频国产精品| 亚洲精品国产精品国自产观看浪潮 | 国产农村妇女精品一二区| 欧美成人一区二区三区在线观看| 国产精品久久久久久超碰| 亚洲激情在线激情| 一色屋精品视频在线看| 亚洲五月六月| 亚洲影院在线| 欧美jjzz| 欧美成人第一页| 国产一区二区三区在线观看免费视频 | 亚洲欧美日韩国产另类专区| 一本色道久久综合狠狠躁篇怎么玩 | 在线视频一区观看| 99在线精品免费视频九九视| 裸体丰满少妇做受久久99精品| 久久精品国产视频| 国产精品毛片a∨一区二区三区| 亚洲精品国产精品久久清纯直播| 亚洲经典视频在线观看| 久久亚洲私人国产精品va媚药| 欧美在线看片a免费观看| 欧美精品一区二区三区蜜臀| 另类激情亚洲| 国产精品免费区二区三区观看| 欧美激情精品久久久| 国产精品免费观看在线| 久久国产综合精品| 欧美国产精品久久| 老司机免费视频一区二区三区| 国产精品chinese| 亚洲国产一区二区精品专区| 樱桃视频在线观看一区| 亚洲午夜免费视频| 亚洲影院色在线观看免费| 欧美紧缚bdsm在线视频| 亚洲国产精品999| 国内成人精品一区| 午夜久久电影网| 午夜精品久久久久久久久久久久久 | 亚洲另类黄色| 美女黄网久久| 久久久青草青青国产亚洲免观| 国产九九精品| 亚洲一区免费| 久久av二区| 亚洲第一精品夜夜躁人人爽| 久久免费99精品久久久久久| 久久人人超碰| 樱桃国产成人精品视频| 久久久99国产精品免费| 久久亚洲高清| 在线看日韩av| 欧美大片免费久久精品三p | 99热在这里有精品免费| 久久综合中文| 欧美激情综合色| 亚洲精品三级| 欧美日韩中文| 亚洲一区二区三区777| 欧美在线观看你懂的| 国产在线不卡视频| 男人的天堂亚洲| 91久久精品日日躁夜夜躁国产| 99香蕉国产精品偷在线观看| 欧美婷婷六月丁香综合色| 日韩视频精品在线观看| 久久久免费av| 亚洲国产网站| 欧美日韩免费网站| 午夜精品三级视频福利| 理论片一区二区在线| 亚洲精品专区| 欧美性开放视频| 麻豆精品视频在线观看视频| 亚洲伦理在线观看| 久久久久成人精品| 亚洲精品中文字幕女同| 国产精品精品视频| 亚洲素人一区二区| 久久婷婷人人澡人人喊人人爽| 亚洲人成77777在线观看网| 欧美精品日韩| 男男成人高潮片免费网站| 亚洲午夜高清视频| 欧美成ee人免费视频| 亚洲一区二区在线视频| 黄色成人在线免费| 欧美日韩美女在线观看| 久久精品一区四区| 亚洲深爱激情| 免费一区二区三区| 亚洲制服少妇| 亚洲日本中文字幕免费在线不卡| 国产麻豆日韩| 麻豆亚洲精品| 免费的成人av| 欧美亚洲一级片| 一本色道久久综合亚洲精品不卡| 你懂的视频一区二区| 一区二区av在线| 亚洲电影在线免费观看| 国产日韩视频| 亚洲在线日韩| 日韩亚洲综合在线| 亚洲电影免费| 久久五月婷婷丁香社区| 午夜精品久久久久久久| 9l国产精品久久久久麻豆| 欧美婷婷久久| 国产精品亚洲网站| 欧美吻胸吃奶大尺度电影| 欧美精品久久久久久久| 久久青青草综合| 久久精品国产视频| 亚洲一区二区三区在线观看视频| 亚洲网站在线| 一本色道88久久加勒比精品 | 亚洲电影一级黄| 国内久久婷婷综合| 国产欧美精品| 国产欧美一区二区三区在线看蜜臀| 国产精品久久久久久久久久久久| 欧美日韩hd| 欧美日韩国产不卡| 欧美日韩一区二区三| 欧美日韩在线三级| 欧美1区2区3区| 国产精品播放| 国产精品婷婷| 国产在线视频欧美一区二区三区| 国产真实久久| 亚洲国产欧美国产综合一区| 一区二区动漫| 亚洲一区在线观看免费观看电影高清| 在线视频日韩| 午夜欧美不卡精品aaaaa| 欧美一级免费视频| 亚洲一区久久| 美玉足脚交一区二区三区图片| 女女同性女同一区二区三区91| 免费视频一区| 亚洲精品乱码久久久久久久久| 亚洲精品久久久久久下一站| 亚洲欧美另类中文字幕| 久久高清福利视频| 美脚丝袜一区二区三区在线观看 | 久久久亚洲国产天美传媒修理工| 欧美中文在线观看国产| 久久久在线视频| 亚洲高清久久| 亚洲综合电影一区二区三区| 久久久99久久精品女同性| 亚洲女人av| 久久成人人人人精品欧| 欧美国产大片| 国产日本欧美在线观看|