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

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

標準C---關于字符串操作

字符串操作是常用的操作之一,下面是相關的函數介紹和相關注意的地方,
一、
strtok查找函數,這個函數改變了源字符串,而且第一個參數必須是數組,不能是指針或字符串,如果是指針或字符串,則會報異常,直接返回NULL.如果不想改變源字符串的內容,建議用strstr來查找子串。
其他常用的查找函數有
strchrstrrchr,前者在字符在字符串第一次出現的位置,后者則是查詢的是字符在字符串中出現的最后一次的位置;兩個函數返回的都是地址,注意,這里返回的首地址的值就是這個字符。這兩個查找函數都不會改變源字符串(數組的)內容。

二、Strlenmemset,如下面的代碼:
char* temp = (char*)malloc(67 * sizeof(char));
Int leng = strlen(temp);
Memset(temp,0,strlen(temp));
Leng = strlen(temp);
兩次leng的值是不一樣的,第一次是正確的值,第二次是0;strlen找的是’\0’,但是不包括’\0’;

三、strcpy等雖然不安全可,但是要記?。簊trcpy_s等是微軟自己搞的一套,在liunx上是無法使用的。如果要部分拷貝,我們可以在
strcpy的參數上直接對地址加減或在strncpy上對源字符串的地址更改或是對strncpy上的第三個參數加以修改來達到目的。
strcpy等不安全主要表現在沒有會發生字符串截斷、   字符串沒有正確的結束符,還有就是字符串的邊界問題。
malloc和free一般情況下要配對,但是如果是static變量,則可以不用free,不會發生內存泄漏的情況。

四、構造字符串---sprintf,提取一個字符串的某個字段---scanf,這兩個是相反的過程。
sprintf常用在拼接字符串,如:sprintf(buffer,"%s=%s","Three",3);buffer中的字符串就是"Three=3",有時它可以替代strcat函數;

sscanf和sprintf是兩個相反的過程,如果你知道字符串的格式完全可以用這個函數還替代strtok和strstr這兩個查找函數;例如:char str[] = "watch is 34.3433 !!!";
那么我們可以提取34.3433,sscanf(str,"%s %s %f",ch,&t_fTemp);這個t_fTemp的值就是34.3433.

五、提取子串和字符在字符串的位置:strstr、strtok、strchr等,這些函數有個缺憾:如果我們要查找字串“222”是否在“22222 tok“中時,這幾個函數都不起作用,要么自己寫,要么自己根據字串在父串中的指針的下個地址的內容來確定.例如:
char str[] = "2222 tok";
char end_char = ' ';//這個可由自己根據業務定義
if(*(strstr(str,"222")+1) != end_char)
{
..................
}
六、strstr函數另一個缺點:char str[] = "port 56 78" char *ch = strstr(str,"port");ch的值是str的首地址,而非我們要的結果,如果把空格改成/t/r等轉義字符
結果依然如此,我們在使用str相關的函數時要主義類似的問題,這種結果在解析協議和讀文件時是致命,而且是難以察覺的錯誤。

posted on 2010-07-28 21:10 Benjamin 閱讀(778) 評論(6)  編輯 收藏 引用 所屬分類: C/C++

評論

# re: 標準C---關于字符串操作  回復  更多評論   

但是如果是static變量,則可以不用free,不會發生內存泄漏的情況。

這個怎么理解??
2010-07-29 09:13 | egmkang

# re: 標準C---關于字符串操作  回復  更多評論   

_s,_t的那一套函數都是CRT函數,Unix-Like米有
如果嫌strcpy不安全,可以使用strncpy,帶n的都有防止越界的功能.
2010-07-29 09:14 | egmkang

# re: 標準C---關于字符串操作  回復  更多評論   

如果是靜態變量是malloc產生的,可以不用free,不會發生內存泄漏的情況;
所有str函數都有越界問題,都不是安全的;很多的編程規范也是禁止使用這些函數,在一些惡意代碼就是通過這些函數的漏洞來注入的。
2010-07-29 13:40 | Benjamin

# re: 標準C---關于字符串操作  回復  更多評論   

char* temp = (char*)malloc(67 * sizeof(char));
Int leng = strlen(temp);
Memset(temp,0,strlen(temp));
Leng = strlen(temp);
兩次leng的值是不一樣的,第一次是正確的值,第二次是0;strlen找的是’\0’,但是不包括’\0’;

strlen遇‘\0’結束,所以,在未memset之前,分配的內存塊都是隨機值,有可能是0,第一次有可能不是固定的值
2010-07-29 16:55 | roy

# re: 標準C---關于字符串操作  回復  更多評論   

@roy

好像我有點過時了
剛才分別在Linux/Solaris/Tru64/HP-UX下測試這段代碼N次,每次輸出都是0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char *tmp = (char *) malloc(1024 * sizeof(char));
printf("%d\n", strlen(tmp));
free(tmp);
return 0;
}

2010-07-29 17:11 | roy

# re: 標準C---關于字符串操作  回復  更多評論   

@roy
不錯,第一次返回的值不是它本身的長度,是從分配的首地址開始起一直到找到結束符的長度,可能是0也可能是不是0.如果正好下一個地址存放的就是結束符,那么長度就恰巧為0,所以你上面的strlen返回0也正常。
2010-07-29 21:21 | Benjamin
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲视频在线免费观看| 国产精品国产亚洲精品看不卡15 | 先锋亚洲精品| 模特精品裸拍一区| 久久影院亚洲| 国产精品青草综合久久久久99| 亚洲二区精品| 国产亚洲午夜高清国产拍精品| 99在线精品视频| 99热精品在线观看| 久久综合99re88久久爱| 久久精品国产一区二区三区免费看 | 亚洲国产日韩在线一区模特| 欧美一区成人| 亚洲欧美一区二区三区在线| 欧美精品aa| 亚洲国产日韩一级| 亚洲国产精品黑人久久久| 久久精品国产精品| 玖玖视频精品| 精品福利av| 久久性色av| 美女诱惑黄网站一区| 激情久久一区| 久久青草久久| 欧美aaaaaaaa牛牛影院| 91久久国产综合久久91精品网站| 久久久久国产精品麻豆ai换脸| 久久免费国产精品1| 国产亚洲精品bv在线观看| 性做久久久久久久久| 久久激情五月婷婷| 激情欧美一区二区三区| 久久一二三四| 亚洲人成网站在线播| 中国女人久久久| 国产精品蜜臀在线观看| 亚洲欧美经典视频| 久久手机免费观看| 亚洲国产精品ⅴa在线观看| 欧美成人激情在线| 亚洲调教视频在线观看| 久久九九精品99国产精品| 在线观看国产精品淫| 欧美国产精品久久| 亚洲视频在线看| 久久在线精品| 99国产精品久久久久久久| 国产精品成人观看视频国产奇米| 亚洲欧美日韩天堂| 欧美成人dvd在线视频| 99re热这里只有精品免费视频| 国产精品v亚洲精品v日韩精品| 亚洲欧美区自拍先锋| 欧美成人午夜免费视在线看片| 亚洲最黄网站| 国产性做久久久久久| 免费一级欧美片在线观看| 夜夜嗨av色一区二区不卡| 久久精品亚洲乱码伦伦中文| 亚洲精品国精品久久99热| 国产精品久久久对白| 久久久久久久999| 一区二区毛片| 免费在线播放第一区高清av| 9久草视频在线视频精品| 国产亚洲激情视频在线| 欧美大片在线观看| 久久成人18免费网站| 亚洲精品一区二区在线| 久久亚洲图片| 香蕉久久精品日日躁夜夜躁| 亚洲精品久久久久中文字幕欢迎你| 国产免费亚洲高清| 欧美日韩在线精品| 久久亚洲图片| 午夜精品久久久久久久男人的天堂| 欧美韩日视频| 久久精品女人| 亚洲免费中文| 在线亚洲精品| 最近中文字幕mv在线一区二区三区四区 | 99re热这里只有精品视频| 国产午夜亚洲精品理论片色戒| 欧美精品一线| 免费不卡视频| 久久久激情视频| 先锋影院在线亚洲| 亚洲天堂av在线免费| 亚洲精品久久在线| 欧美粗暴jizz性欧美20| 久久一区国产| 久久精品视频在线| 亚欧成人在线| 亚洲欧美电影在线观看| 亚洲无线视频| 夜夜嗨av一区二区三区| 日韩午夜激情av| 亚洲精品久久久久久久久久久| 亚洲国产精品va| 激情视频一区| 精品电影在线观看| 韩日成人在线| 伊人久久亚洲影院| 在线电影一区| 亚洲第一精品久久忘忧草社区| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品色网| 国产欧美三级| 国产婷婷色一区二区三区在线| 国产精品影院在线观看| 国产精品久久久久av免费| 欧美四级在线观看| 国产精品欧美久久| 国产女人水真多18毛片18精品视频| 国产精品国内视频| 国产精品久久久久婷婷| 国产精品久久久爽爽爽麻豆色哟哟| 欧美性片在线观看| 国产精品自拍在线| 国产日韩欧美在线| 影音先锋久久久| 91久久久在线| 亚洲深夜福利视频| 午夜在线精品| 久久亚洲免费| 亚洲全部视频| 亚洲一级电影| 久久久久久9999| 欧美大片一区二区三区| 欧美特黄一级大片| 韩国精品久久久999| 亚洲精品一区二区三区四区高清| 亚洲美女在线视频| 亚洲欧美一区二区三区极速播放 | 久久视频在线视频| 欧美激情综合色综合啪啪| 国产精品二区在线观看| 国产偷国产偷精品高清尤物| 亚洲国产精品视频| 亚洲一区二区三区在线视频| 久久精品麻豆| 亚洲福利av| 午夜亚洲一区| 欧美精品久久一区| 国产精品一卡| 亚洲日本在线观看| 久久av在线| 亚洲日本精品国产第一区| 亚洲免费视频网站| 欧美成人精品在线| 国产女主播在线一区二区| 亚洲激精日韩激精欧美精品| 亚洲一级黄色| 欧美激情aⅴ一区二区三区| 国产精品99久久久久久白浆小说| 久久精品夜色噜噜亚洲a∨| 欧美日韩在线播放一区二区| 黑丝一区二区三区| 午夜精品在线| 欧美国产激情二区三区| 欧美一区二区三区免费在线看| 欧美精品v日韩精品v韩国精品v| 国产日韩一区在线| 亚洲一区二区三区精品动漫| 欧美成人亚洲成人| 欧美亚洲一区二区三区| 欧美日韩亚洲成人| 亚洲人成久久| 老司机精品视频网站| 亚洲一区免费网站| 欧美日本精品| 亚洲精品一区在线观看香蕉| 久热精品视频在线| 亚洲欧美日韩国产一区二区| 欧美日韩亚洲国产精品| 亚洲乱码精品一二三四区日韩在线 | 午夜视频久久久久久| 亚洲区国产区| 欧美国产欧美综合| 亚洲风情在线资源站| 久久乐国产精品| 欧美一区二区免费| 国产老肥熟一区二区三区| 亚洲午夜视频在线| 99re8这里有精品热视频免费| 欧美韩日一区二区| 亚洲人午夜精品免费| 欧美激情综合色综合啪啪 | 最新中文字幕亚洲| 麻豆成人在线观看| 亚洲黄色大片| 欧美国产一区二区在线观看| 巨胸喷奶水www久久久免费动漫| 国内精品久久久久影院薰衣草| 久久精品国产精品亚洲精品| 午夜精品一区二区三区四区| 国产主播一区二区三区| 久久―日本道色综合久久| 欧美一区二区高清在线观看|