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

唐吉訶德

  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>
            99re热这里只有精品视频| 欧美电影免费观看大全| 久久中文欧美| 玖玖综合伊人| 欧美成人一品| 日韩视频精品在线观看| 亚洲视频久久| 欧美一区二区性| 另类酷文…触手系列精品集v1小说| 欧美一区二区日韩一区二区| 久久综合九色综合久99| 欧美日韩国产免费观看| 欧美视频在线不卡| 国产视频综合在线| 亚洲欧洲一区二区天堂久久 | 国产一二精品视频| 亚洲国产日韩欧美在线动漫 | 欧美va天堂在线| 亚洲线精品一区二区三区八戒| 亚洲欧美变态国产另类| 午夜精品电影| 欧美国产视频在线| 亚洲深夜福利| 久久久久久久国产| 欧美性色aⅴ视频一区日韩精品| 国产午夜亚洲精品不卡| 亚洲精品欧美日韩| 久久久精品国产免费观看同学| 亚洲黄色影院| 午夜视频在线观看一区二区三区| 欧美3dxxxxhd| 国产一区在线观看视频| 亚洲男人第一网站| 亚洲激情在线播放| 久久综合影视| 国产综合激情| 欧美一区三区二区在线观看| 亚洲欧洲精品一区二区三区| 久久久久亚洲综合| 国产亚洲综合在线| 久久99伊人| 亚洲自拍偷拍视频| 欧美午夜免费影院| 一区二区av在线| 亚洲第一区在线| 久久香蕉国产线看观看网| 国产女人aaa级久久久级| 亚洲图片欧洲图片av| 亚洲第一主播视频| 麻豆成人综合网| 亚洲福利在线观看| 免费av成人在线| 久久aⅴ乱码一区二区三区| 国产精品成人在线| 亚洲一区在线播放| 制服诱惑一区二区| 国产精品久久久久久久久久直播| av成人黄色| 亚洲毛片播放| 欧美性天天影院| 午夜精品在线视频| 亚洲欧美第一页| 国产视频一区二区三区在线观看| 亚洲欧美日韩精品久久久| 亚洲小视频在线观看| 国产精品理论片在线观看| 午夜亚洲福利| 欧美在线日韩| 亚洲级视频在线观看免费1级| 亚洲电影在线观看| 欧美日韩精品一区| 亚洲欧美在线免费观看| 欧美在线免费观看亚洲| 亚洲东热激情| 99视频超级精品| 国产欧美日韩另类视频免费观看 | 午夜免费电影一区在线观看| 亚洲午夜精品一区二区| 亚洲国产片色| 亚洲欧美日韩第一区| 国产精品va在线播放| 香蕉乱码成人久久天堂爱免费 | 午夜精品偷拍| 午夜精品国产精品大乳美女| 国内精品久久久| 亚洲高清二区| 欧美日韩精选| 久久精品综合一区| 欧美电影免费观看高清| 亚洲一区二区三区涩| 欧美一区二区三区成人| 亚洲黑丝在线| 亚洲免费视频一区二区| 亚洲国产精品一区二区www在线| 最新国产成人在线观看| 国产毛片久久| 亚洲国产精品一区二区第四页av| 欧美视频在线观看免费| 久久综合久久综合九色| 欧美日韩在线播放一区二区| 久久天天综合| 国产精品欧美在线| 91久久精品视频| 国产亚洲午夜| 亚洲午夜精品视频| 亚洲美洲欧洲综合国产一区| 亚洲欧美综合v| 一区二区免费在线观看| 久久久久这里只有精品| 亚洲欧洲av一区二区| 美女免费视频一区| 欧美在线视频观看免费网站| 欧美片第1页综合| 欧美大片在线观看| 国产一区二区中文字幕免费看| 亚洲三级性片| 亚洲品质自拍| 久久在线免费观看| 久久精品中文字幕一区| 国产精品久久久一本精品| 亚洲黄色高清| 亚洲欧洲一区二区在线观看| 久久久福利视频| 久久久久久网站| 国产欧美一区视频| 亚洲与欧洲av电影| 午夜精品网站| 国产精品一二一区| 亚洲一区二区三区久久| 亚洲一级在线| 国产精品麻豆欧美日韩ww| 亚洲伦理精品| 亚洲一区二区三区四区在线观看| 久久精品国产69国产精品亚洲| 最新国产乱人伦偷精品免费网站 | 国产精品久久夜| 亚洲久色影视| 在线视频精品一区| 欧美巨乳在线| 99re66热这里只有精品3直播 | 日韩视频一区二区在线观看| 免费在线观看一区二区| 欧美成人69av| 91久久久久| 欧美精品激情| 夜夜嗨av一区二区三区中文字幕| 亚洲一二三四久久| 国产欧美日韩亚州综合| 欧美在线视频免费| 欧美jjzz| 一区二区三区蜜桃网| 国产精品嫩草99a| 久久精品在线观看| 亚洲高清二区| 亚洲免费影院| 国内揄拍国内精品少妇国语| 毛片一区二区三区| 夜夜精品视频| 久久久久久久久久久久久久一区 | 久久综合九色综合欧美就去吻| 精品成人在线观看| 欧美激情国产日韩| 亚洲午夜伦理| 麻豆精品在线视频| 日韩午夜剧场| 国产视频一区在线观看| 男女精品视频| 亚洲欧美高清| 亚洲高清在线精品| 午夜精品久久久久久久99樱桃| 国内精品伊人久久久久av影院| 欧美成人一二三| 亚洲欧美日韩中文视频| 欧美xart系列高清| 午夜精品免费在线| 亚洲欧洲精品一区二区| 国产精品欧美精品| 欧美福利电影在线观看| 午夜精品久久久久久久白皮肤 | 久久一综合视频| 亚洲影音先锋| 最新日韩在线视频| 久久人人97超碰精品888| 亚洲视频免费在线观看| 亚洲缚视频在线观看| 国产精品亚洲美女av网站| 欧美国产先锋| 狼人天天伊人久久| 香港久久久电影| 日韩一级精品| 亚洲黄网站在线观看| 美女尤物久久精品| 欧美在线观看你懂的| 一区二区三区日韩欧美| 亚洲国产精品123| 国产毛片精品视频| 一区二区三区蜜桃网| 欧美激情一区二区三区在线| 欧美一区二区黄色| 亚洲一区国产一区|