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

唐吉訶德

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

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

看到這樣一個改錯題:
char p[5]; 
char* s="12345"
strcpy(p,s);
   cout << p << endl;
錯誤之處是很顯然的,作為字符串字面值的"12345"會在結(jié)尾處自動加上空字符null,從而長度是6,上面的strcpy是會越界的,從而是個越界錯誤。
問題是我以為這樣的程序編譯的時候會出錯呢!但是我在vc上運行時是可以輸出正確結(jié)果的,這讓我很是納悶!后來找到了strcpy的源代碼才知原因,strcpy函數(shù)是不進行越界處理的. 又因為strcpy連null一起復(fù)制,從而p能輸出正確的結(jié)果"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雖然不進行越界處理,仍然是個挺好的函數(shù)呢,但是注意了,下面的代碼就能暴露出strcpy 的缺點了.
char p[5];
char *= "12345678";
strcpy(p,s);
cout 
<< p <<endl; //輸出12345678,而不是我們所設(shè)想的12345
為了不因不知s的長度而犯下錯誤,推薦使用strncpy。但是是不是用了strncpy就萬無一失了呢?看下面的代碼:
char p[5];
char* s = "12345";
strncpy(p,s,
5);
cout 
<< p <<endl; //12345*&^(后面表示亂碼)
不是都限制個數(shù)了么?為什么后面又有亂碼?
問題來自在上述情形strncpy是不會復(fù)制字符串s后面的null的,不是以null結(jié)束的p不會輸出正確結(jié)果的。
仍然給出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這么不穩(wěn)定,為何用它?strncpy經(jīng)常用于修改一個長字符串中間的一部分(看出不復(fù)制null的原因了吧!),如果實在要用到上述的代碼上,就在代碼最后加上p[5] = '\0'; 吧!

函數(shù)名: 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;
}
 
 
 
函數(shù)名: strcat
功  能: 字符串拼接函數(shù)
用  法: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: strcspn
功  能: 在串中查找第一個給定字符集內(nèi)容的段
用  法: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: 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);
}
 
 
函數(shù)名: 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;
}
 
 
函數(shù)名: 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;
}
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: strnset
功  能: 將一個串中的所有字符都設(shè)為指定字符
用  法: 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;
}
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: strrchr
功  能: 在串中查找指定字符的最后一個出現(xiàn)
用  法: 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;
}
 
 
 
函數(shù)名: strrev
功  能: 串倒轉(zhuǎn)
用  法: 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;
}
 
函數(shù)名: strset
功  能: 將一個串中的所有字符都設(shè)為指定字符
用  法: 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;
}
 
 
 
函數(shù)名: strspn
功  能: 在串中查找指定字符集的子集的第一次出現(xiàn)
用  法: 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;
}
 
 
函數(shù)名: strstr
功  能: 在串中查找指定字符串的第一次出現(xiàn)
用  法: 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;
}
 
 
函數(shù)名: strtod
功  能: 將字符串轉(zhuǎn)換為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;
}
 
 
 
函數(shù)名: 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;
}
 
 
 
函數(shù)名: strtol
功  能: 將串轉(zhuǎn)換為長整數(shù)
用  法: 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;
}
 
函數(shù)名: strupr
功  能: 將串中的小寫字母轉(zhuǎn)換為大寫字母
用  法: 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;
}
 
 
 
函數(shù)名: swab
功  能: 交換字節(jié)
用  法: 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()是字符函數(shù),不是字符串函數(shù),

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 心羽 閱讀(432) 評論(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>
            麻豆精品一区二区综合av| 亚洲欧美在线播放| 欧美精品首页| 欧美激情国产精品| 欧美女同视频| 国产精品mm| 国产精品资源| 狠狠噜噜久久| 亚洲精品三级| 亚洲欧美日韩成人高清在线一区| 亚洲综合日本| 久久免费精品日本久久中文字幕| 久久亚裔精品欧美| 亚洲国产欧美国产综合一区| 亚洲黄一区二区三区| 亚洲激情视频网| 亚洲午夜一二三区视频| 欧美一区二区三区视频在线| 久久婷婷久久| 国产精品99一区二区| 国产一区二区三区的电影| 国内免费精品永久在线视频| 一片黄亚洲嫩模| 国产精品红桃| 精品1区2区| 99综合在线| 欧美影院久久久| 亚洲国产日韩在线| 亚洲欧美欧美一区二区三区| 欧美xx视频| 国产日韩久久| 亚洲一区国产一区| 亚洲国产精品一区二区久| 亚洲免费在线精品一区| 欧美黄色成人网| 尤物yw午夜国产精品视频| 亚洲综合丁香| 最新精品在线| 久久一区二区三区四区五区| 国产精品久久久久久久久久久久久| 亚洲第一精品福利| 久久精品国产清自在天天线| 一本色道久久88精品综合| 老司机精品导航| 国产亚洲一级高清| 亚洲欧美成人综合| 亚洲裸体视频| 欧美精品色网| 日韩亚洲不卡在线| 欧美激情女人20p| 久久久综合免费视频| 国产情人节一区| 欧美亚洲自偷自偷| 亚洲一本视频| 国产精品美女久久久久久免费| 一本色道久久综合亚洲精品不卡| 欧美成人中文字幕在线| 久久激情五月婷婷| 国产亚洲美州欧州综合国| 亚洲欧美国产不卡| 亚洲一区二区精品在线观看| 欧美亚一区二区| 亚洲一二区在线| 中文欧美日韩| 国产伦精品一区二区| 久久丁香综合五月国产三级网站| 亚洲伊人网站| 国产日韩欧美视频| 麻豆精品在线观看| 老牛影视一区二区三区| 亚洲人久久久| 日韩视频二区| 国产农村妇女毛片精品久久麻豆| 久久成人免费视频| 久久久久在线观看| 亚洲毛片网站| 亚洲视频在线视频| 国产日韩精品视频一区二区三区| 久久国产夜色精品鲁鲁99| 欧美在线视频一区二区三区| 黄色成人av网| 国产一区二区三区在线观看精品 | av成人免费在线观看| 欧美电影专区| 亚洲男人的天堂在线aⅴ视频| 亚洲永久视频| 国产综合在线视频| 亚洲第一主播视频| 日韩一二三在线视频播| 一区二区三区免费网站| 国精产品99永久一区一区| 欧美福利一区二区| 国产精品高精视频免费| 久久综合色婷婷| 欧美日韩免费在线视频| 久久精品一本久久99精品| 免费一级欧美在线大片| 午夜久久黄色| 免费视频一区| 久久gogo国模啪啪人体图| 免费久久99精品国产自| 亚洲综合精品四区| 欧美福利视频网站| 久久爱www久久做| 欧美日韩美女| 免费成人av| 国产区亚洲区欧美区| 最新亚洲电影| 在线成人h网| 亚洲一区在线播放| 日韩视频一区二区三区在线播放| 欧美一级专区| 性xx色xx综合久久久xx| 欧美精品日韩| 欧美电影免费网站| 韩国一区二区三区在线观看| 亚洲人成在线播放网站岛国| 精品成人久久| 性感少妇一区| 欧美一区激情视频在线观看| 欧美日韩中文字幕在线视频| 欧美va亚洲va香蕉在线| 国产日韩欧美精品在线| 亚洲视频免费在线观看| 亚洲精品在线观| 久久久久久综合| 久久久五月天| 国产综合色产在线精品| 亚洲综合久久久久| 亚洲欧美乱综合| 欧美亚州在线观看| 一本色道久久综合| 一区二区精品在线| 欧美精品免费在线观看| 亚洲国产精品一区在线观看不卡 | 欧美日韩精品一区二区三区四区| 美国十次成人| 亚洲第一在线| 久久综合网络一区二区| 欧美 亚欧 日韩视频在线| 精久久久久久| 久久亚洲综合色| 久久久视频精品| 国产视频精品xxxx| 欧美一区二区三区免费观看视频| 亚洲伊人第一页| 欧美性猛交xxxx乱大交退制版| 日韩视频免费观看高清完整版| 99精品热视频| 欧美视频在线视频| 亚洲欧美精品在线| 久久一综合视频| 亚洲激情成人| 欧美日韩国产综合视频在线| 99re这里只有精品6| 亚洲一区久久| 国产一区二区三区高清| 麻豆av一区二区三区| 亚洲国产精品福利| 亚洲免费视频网站| 国内伊人久久久久久网站视频 | 欧美精品在线免费观看| 夜夜嗨av一区二区三区网站四季av| 亚洲午夜羞羞片| 韩国成人福利片在线播放| 久久综合久久88| 亚洲精品乱码久久久久久黑人| 亚洲女同同性videoxma| 韩日欧美一区| 欧美日韩免费观看一区 | 欧美日韩成人在线观看| 亚洲先锋成人| 免费视频最近日韩| 亚洲欧美另类久久久精品2019| 狠狠色综合网| 欧美日韩另类丝袜其他| 欧美一区二区啪啪| 91久久精品国产91久久| 欧美自拍偷拍| 99亚洲一区二区| 国产欧美日韩91| 欧美日韩 国产精品| 欧美中文在线观看| 日韩午夜一区| 亚洲第一网站免费视频| 久久精品国产综合| 在线一区二区三区做爰视频网站 | 亚洲黄色成人久久久| 久久精品国产一区二区三| 中文久久乱码一区二区| 有码中文亚洲精品| 国产欧美日韩综合| 欧美视频一区二区在线观看| 裸体歌舞表演一区二区| 久久福利精品| 亚洲欧美日韩综合国产aⅴ| 亚洲精品一区在线观看| 欧美二区在线播放| 久久只精品国产| 欧美制服丝袜第一页|