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

唐吉訶德

  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>
            久久久久久色| 亚洲国产欧美久久| 亚洲免费观看视频| 欧美精品大片| 亚洲图片欧美日产| 亚洲一区日韩在线| 国产精品视频大全| 久久理论片午夜琪琪电影网| 欧美一级久久| 亚洲国产三级在线| 亚洲人永久免费| 国产精品成人在线| 亚洲精品免费电影| 欧美一区二区三区四区高清| 最新国产精品拍自在线播放| 国产精品青草久久| 欧美在线视频a| 久久久蜜桃一区二区人| 亚洲日本aⅴ片在线观看香蕉| 亚洲国产成人精品女人久久久| 欧美日本不卡| 欧美在线|欧美| 麻豆乱码国产一区二区三区| 99国产一区| 欧美一区免费| 99热这里只有精品8| 亚洲欧美日韩直播| 亚洲激情第一区| 亚洲永久免费av| 亚洲国产午夜| 香蕉成人伊视频在线观看| 精品动漫一区| 国产精品99久久久久久白浆小说| 国产一区深夜福利| 亚洲精品一区二区三区福利| 国产私拍一区| 99国产精品视频免费观看一公开| 国产亚洲视频在线| 亚洲卡通欧美制服中文| 狠狠久久亚洲欧美| 亚洲图片欧洲图片日韩av| 在线观看视频一区| 亚洲自拍三区| 在线亚洲欧美| 欧美成年人视频网站欧美| 久久成人免费| 国产精品久久午夜夜伦鲁鲁| 亚洲电影中文字幕| 狠狠色综合日日| 亚洲男人的天堂在线观看| 99精品视频一区| 免费高清在线一区| 久久三级视频| 国产夜色精品一区二区av| 99综合精品| 一本久久综合亚洲鲁鲁五月天 | 国产亚洲欧美一区二区三区| 亚洲黄色三级| 亚洲欧洲精品成人久久奇米网| 亚洲欧美一区二区激情| 亚洲综合不卡| 国产精品播放| 中国成人黄色视屏| 亚洲性视频网站| 欧美视频在线观看一区| 亚洲人成在线观看一区二区| 亚洲欧洲精品一区二区三区| 久久综合成人精品亚洲另类欧美| 欧美中文字幕在线视频| 国产精品久久久久久久久久直播 | 欧美在线观看视频一区二区三区| 欧美日韩欧美一区二区| 亚洲日韩欧美一区二区在线| 亚洲激情欧美激情| 欧美激情国产日韩| 亚洲九九精品| 亚洲一区精彩视频| 国产精品久久久久久久久久ktv | 久久久久99| 欧美成人午夜视频| 亚洲精品中文字幕在线观看| 欧美精品尤物在线| 99在线热播精品免费| 亚洲欧美综合| 韩国成人理伦片免费播放| 久久一区视频| 亚洲黄色视屏| 午夜久久一区| 尤物yw午夜国产精品视频明星 | 亚洲美女性视频| 亚洲欧美日韩综合一区| 国产亚洲欧美aaaa| 久久午夜色播影院免费高清| 亚洲国产精品专区久久| 亚洲一区999| 狠狠色综合网站久久久久久久| 老牛影视一区二区三区| 日韩视频永久免费| 久久精品水蜜桃av综合天堂| 亚洲第一综合天堂另类专| 欧美精品免费播放| 午夜久久久久久| 欧美激情一区二区三区四区| 亚洲一级一区| 亚洲电影观看| 国产精品卡一卡二卡三| 久久久久综合网| 亚洲午夜av电影| 美女国内精品自产拍在线播放| 日韩午夜av电影| 国产一区二区看久久| 欧美精品v日韩精品v韩国精品v| 亚洲性色视频| 欧美福利视频一区| 欧美在线不卡| 一本色道久久综合狠狠躁篇怎么玩| 国产精品永久在线| 欧美成人一区在线| 欧美中文日韩| 在线视频你懂得一区| 亚洲国产二区| 久久深夜福利免费观看| 午夜精品久久久久久久久久久久| 亚洲黄色免费| 尤妮丝一区二区裸体视频| 国产精品久久久久久久久久ktv| 你懂的网址国产 欧美| 午夜精品理论片| 一本一本久久a久久精品综合妖精| 蜜桃av综合| 久久一二三区| 久久精品二区三区| 欧美一级黄色网| 亚洲欧美电影院| 亚洲精品一线二线三线无人区| 国产一区二区三区免费在线观看| 国产精品99一区| 欧美日韩午夜在线| 欧美激情一区在线| 欧美福利影院| 欧美国产一区视频在线观看 | 亚洲欧美在线aaa| 日韩亚洲欧美一区二区三区| 欧美国产日韩视频| 欧美 日韩 国产一区二区在线视频| 欧美一区激情视频在线观看| 午夜精品久久一牛影视| 亚洲小说欧美另类社区| 亚洲午夜视频在线| 亚洲欧美激情一区二区| 亚洲欧美成人在线| 欧美一区二区三区在线观看| 午夜精品久久久久久久99热浪潮| 亚洲欧美欧美一区二区三区| 一区二区三区av| 一区二区三区视频免费在线观看| 在线视频欧美日韩精品| 亚洲综合不卡| 久久国产一区二区| 欧美va亚洲va日韩∨a综合色| 欧美v国产在线一区二区三区| 亚洲二区视频在线| 夜夜爽夜夜爽精品视频| 亚洲欧美日韩在线高清直播| 久久成人资源| 欧美 日韩 国产 一区| 欧美精品国产一区| 国产精品久久婷婷六月丁香| 国产拍揄自揄精品视频麻豆| 伊甸园精品99久久久久久| 亚洲精品欧美一区二区三区| 亚洲一区二区高清视频| 久久精品国产亚洲aⅴ| 免费短视频成人日韩| 亚洲精品在线免费| 欧美一区免费视频| 欧美日韩ab| 国产一级一区二区| 日韩视频一区二区三区| 亚洲网友自拍| 久久精品日产第一区二区| 美女主播精品视频一二三四| 欧美成人综合网站| 亚洲午夜精品| 久久精品亚洲一区| 欧美风情在线观看| 国产欧美日韩亚洲精品| 黑人一区二区| 99亚洲精品| 99视频在线观看一区三区| 亚洲视频视频在线| 欧美怡红院视频| 篠田优中文在线播放第一区| 免费视频久久| 一区二区精品在线| 欧美影视一区| 国产精品久久久久影院亚瑟| 激情综合网激情| 亚洲视频一二| 亚洲电影有码|