js怎么把函数字符串转成函数_字符串处理函数
生活随笔
收集整理的這篇文章主要介紹了
js怎么把函数字符串转成函数_字符串处理函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
整理一下日常用到的c++中的字符串處理函數(shù)
1.strpbrk和strspn
最近看了一個解析http請求的方法,里面用到了這倆函數(shù),在這里記錄一下。首先,http的請求報文的格式如下:
strpbrk和strspn的原型和注釋為:
/* Find the first occurrence in S of any character in ACCEPT. */ extern char *strpbrk (char *__s, const char *__accept)__THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2)); /* Return the length of the initial segment of S whichconsists entirely of characters in ACCEPT. 該函數(shù)返回 s 中第一個不在字符串 accept 中出現(xiàn)的字符下標(biāo)。 */ extern size_t strspn (const char *__s, const char *__accept)__THROW __attribute_pure__ __nonnull ((1, 2));結(jié)合實例進行說明,現(xiàn)在假設(shè)報文如下:
現(xiàn)在結(jié)合代碼和上面示例進行解析: http_conn::HTTP_CODE http_conn::parse_request_line(char *text) {m_url = strpbrk(text, " t"); //m_url=t/chapter17/user.html HTTP/1.1if (!m_url){return BAD_REQUEST;}*m_url++ = '0'; //將t替換為0 m_url=/chapter17/...char *method = text; //應(yīng)為有0的存在,method=POSTif (strcasecmp(method, "GET") == 0)m_method = GET;else if (strcasecmp(method, "POST") == 0){m_method = POST;cgi = 1;}elsereturn BAD_REQUEST;m_url += strspn(m_url, " t"); //確保第一個不是空格 m_url=/chapter17/...m_version = strpbrk(m_url, " t"); //m_version=tHTTP/1.1if (!m_version)return BAD_REQUEST;*m_version++ = '0'; //將t替換為0 m_version=HTTP1.1m_version += strspn(m_version, " t");if (strcasecmp(m_version, "HTTP/1.1") != 0)return BAD_REQUEST;if (strncasecmp(m_url, "http://", 7) == 0){m_url += 7;m_url = strchr(m_url, '/');}if (strncasecmp(m_url, "https://", 8) == 0){m_url += 8;m_url = strchr(m_url, '/');}if (!m_url || m_url[0] != '/')return BAD_REQUEST;//當(dāng)url為/時,顯示判斷界面if (strlen(m_url) == 1)strcat(m_url, "judge.html");m_check_state = CHECK_STATE_HEADER;return NO_REQUEST; }2.strcpy
char *strcpy(char *strDest,const char *strSrc); 微軟中的此函數(shù)的參數(shù)說明: /*** *char *strcpy(dst, src) - copy one string over another * *Purpose: * Copies the string src into the spot specified by * dest; assumes enough room. * *Entry: * char * dst - string over which "src" is to be copied * const char * src - string to be copied over "dst" * *Exit: * The address of "dst" * *Exceptions: *******************************************************************************/有時筆試中會讓手寫一下strcpy的代碼,并問一下為什么會返回char*?
char * __cdecl strcpy(char * dst, const char * src) {char * cp = dst;while( *cp++ = *src++ ); /* Copy src over dst */return( dst );//這塊要注意一下返回dst,而不是cp,因為cp是棧上的變量,如果強行返回, //會導(dǎo)致輸出為亂碼 }大部分人可能看到為什么會返回char*,會想到的是越界的問題,在strcpy是假設(shè)dst有足夠空間的。如果src的長度>dst的長度,也可以拷貝過去,但在最后程序會報
Stack around the variable 'dst' was corrupted.
至于為什么這么做?
通過這篇博客的博主,我了解到了是為了獲得靈活性。例如:
char str[20]; int length = strlen( strcpy(str, “Hello World”) ); 為什么strcpy的返回值是char* ??blog.csdn.net至此,解釋完畢,后續(xù)再補充其他字符串的處理函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的js怎么把函数字符串转成函数_字符串处理函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不交钱的《纽约时报》在Twitter上失
- 下一篇: 倒计时1天!荣耀Paly7T系列明日正式