緩存區的輸入輸出,字符串常用操作,實現strlen/strcpy/strcat/strcmp函數)

輸出緩沖區:

程序輸入的數據并不能立即顯示在屏幕上,而是先存儲在輸出緩沖區中,滿足一些條件后才顯示出來。
1、遇到\n后
2、遇到輸入語句
3、當輸出緩沖區滿4K
4、當程序結束
5、手動刷新 fflush(stdout)
緩沖區機制可以提高數據的讀寫速度。
#include <stdio.h>
#include <unistd.h>int main(int argc,const char* argv[])
{printf("請輸入一個整數");fflush(stdout);sleep(3);
}

輸入緩沖區:

程序并不立即獲取到屏幕上輸入的數據,而按下回車鍵后程序才從輸入緩沖區中讀取數據。1、當讀取整型或浮點型數據時,而緩沖區中的數據是字母或符號,此時將讀取失敗,并且會影響接收下來所有的數據讀取。2、fgets可以指定讀取size-1字符,如果有多余的會殘留在輸入緩沖區中。3、當先輸入整型、浮點型數據,再輸入字符、字符串時前一次會殘留一個'\n',影響字符、字符串的輸入。scanf(" %c",&ch);   方法1:必須確定緩沖區中有垃圾數據,否則程序就停下了等待一個\nscanf("%*[^\n]");scanf("%*c");方法2:把輸入緩沖區的當前位置指針移動到末尾,只能在Linux系統下使用。stdin->_IO_read_ptr = stdin->_IO_read_end;
使用示例:

1、

#include <stdio.h>int main(int argc,const char* argv[])
{int a,b,c;while(3 > scanf("%d%d%d",&a,&b,&c)){printf("輸入的數據格式有誤,請重新輸入:");stdin->_IO_read_ptr = stdin->_IO_read_end;}printf("%d %d %d\n",a,b,c);
}

2、

#include <stdio.h>int main(int argc,const char* argv[])
{char str[20] = {};fgets(str,20,stdin);puts(str);stdin->_IO_read_ptr = stdin->_IO_read_end;/*int len = 0;while(str[len]) len++;if(str[len-1] != '\n'){scanf("%*[^\n]");scanf("%*c");}*/char arr[20] = {};scanf("%s",arr);puts(arr);}

字符串的常用操作:

#include <string.h>
size_t strlen(const char *s);
功能:計算字符串長度,結果不包括'\0'char *strcpy(char *dest, const char *src); 
功能:把src拷貝到dest,相當于給dest賦值 =
返回值:dest(鏈接調用)
char *strncpy(char *dest, const char *src, size_t n);
功能:只拷貝n個字符char *strcat(char *dest, const char *src);
功能:把字符src追加到dest的末尾,相當于 +=
char *strncat(char *dest, const char *src, size_t n);
功能:只追加n個字符int strcmp(const char *s1, const char *s2);
功能:比兩個字符串,按照字典序,誰在前誰小。
返回值:s1 > s2 正數s1 < s2 負數s1 == s2  0
int strncmp(const char *s1, const char *s2, size_t n);
功能:只比較前n個字符int atoi(const char *nptr);
功能:字符串轉int類型long atol(const char *nptr);
功能:字符串轉long類型long long atoll(const char *nptr);
功能:字符串轉long long類型double atof(const char *nptr);
功能:字符串轉double類型char *strstr(const char *haystack, const char *needle);
功能:查找haystack中是否存在needle
返回值:needle第一次在haystack出現的位置,如果找不到返回NULLchar *strchr(const char *s, int c);
功能:查找字符串s中是否有字符c。
返回值:c在s中第一次出現的位置,如果找不到返回NULL。int sprintf(char *str, const char *format, ...);
功能:把各大類型的數據輸出到str中
返回值:字符串str的長度int sscanf(const char *str, const char *format, ...);
功能:從str中讀取數據
返回值:成功讀取到的變量個數void *memcpy(void *dest, const void *src, size_t n);
功能:從src位置拷貝n個字節到destint memcmp(const void *s1, const void *s2, size_t n);
功能:比較兩塊內存是相等,按字節比較
返回值:s1 == s2 0s1 > s2 正數s1 < s2 負數void *memmove(void *dest, const void *src, size_t n);
功能:從src位置拷貝n個字節到dest
注意:與memcpy區別dest與src如果有重疊也能正常工作,它會比較dest和src的前后關系。dest < src 從后往前拷貝dest > src 從前往拷貝

練習:自己實現 strlen,strcpy,strcat,strcmp 四個常用的字符串處理函數。

#include <stdio.h>
#include <string.h>
#include <assert.h>size_t str_len(const char* str)
{assert(NULL !=str);const char* tmp = str;while(*tmp) tmp++;return tmp - str;
}char* str_cpy(char* dest,const char* src)
{assert(NULL!=dest && NULL!=src);char* tmp = dest;while(*tmp++ = *src++);return dest;
}char* str_cat(char* dest,const char* src)
{assert(NULL!=dest && NULL!=src);char* tmp = dest;while(*tmp) tmp++;while(*tmp++ = *src++);return dest;
}int str_cmp(const char* s1,const char* s2)
{assert(NULL!=s1 && NULL!=s2);while(*s1 && *s1 == *s2) s1++,s2++;if(*s1 > *s2)return 1;if(*s1 < *s2)return -1;return 0;
}int main(int argc,const char* argv[])
{char str[255] = "heehxixi";// printf("%d\n",strlen(NULL));
//	printf("%d\n",str_len(NULL));puts(str_cpy(str,"hellowrold"));puts(str_cat(str,"haha"));printf("%d\n",str_cmp("12345","1234"));
}

over-----

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

理性分散投資 收益袋袋平安

理財錦囊 想要投資理財&#xff0c;不光可以選擇股票和債券這類入門產品&#xff0c; 實際上&#xff0c;還可選擇其他低風險及高回報的投資產品&#xff0c;例如外匯、期貨和商品。 針對此&#xff0c;幾位分析師預測了2014年各國經濟走勢的重點&#xff0c;協助散戶們分配…

AI一周熱聞:華為豪擲3.3億劍橋買地,自建光芯片工廠;比特大陸IPO失敗,組織架構調整...

導讀 華為豪擲3.3億劍橋買地&#xff0c;自建光芯片工廠蘋果春季發布會無硬件發布&#xff0c;轉型之心迫切比特大陸IPO失敗&#xff0c;組織架構調整&#xff0c;王海超任CEO特斯拉起訴小鵬汽車員工竊取商業機密英偉達發布GauGAN&#xff0c;線條色塊秒變逼真圖像用機器學習防…

Docker 環境:Nexus3.x 的私有倉庫

Nexus3.x 的私有倉庫 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 使用 Docker 官方的 Registry 創建的倉庫面臨一些維護問題。比如某些鏡像刪除以后空間默認是不會回收的&#xff…

虛擬環境vitualenv的使用

Python3開發之虛擬環境virtualenv與virtualenvwrapper 在使用 Python 開發的過程中&#xff0c;工程一多&#xff0c;難免會碰到不同的工程依賴不同版本的庫的問題&#xff1b; 亦或者是在開發過程中不想讓物理環境里充斥各種各樣的庫&#xff0c;引發未來的依賴災難。 此時&am…

find_first_of和find函數的區別

小記&#xff1a; find_first_of函數最容易出錯的地方是和find函數搞混。它最大的區別就是如果在一個字符串str1中查找另一個字符串str2&#xff0c;如果str1中含有str2中的任何字符&#xff0c;則就會查找成功&#xff0c;而find則不同&#xff1b;

銀行各類理財收益漸漲 各類寶錢景尚不明朗

這個春天&#xff0c;投資似乎進入了一個好事多磨的階段。央行一反先前支持的態度&#xff0c;開始對互聯網理財念起了“緊箍咒”。一時間&#xff0c;各種“寶”的命運變得撲朔迷離起來。盡管各種“寶”聲明&#xff1a;不受央行政策影響。而投資者內心的擔憂&#xff0c;恐怕…

Firefox 66回歸!修復多項臭蟲相關問題

上周最新版Firefox 66因為爆出會使微軟Office 365中的PowerPoint文字消失的臭蟲&#xff0c;Mozilla暫停發送。3月27日Mozilla重新釋出修補完成的最新版Firefox 66.0.2。根據Mozilla臭蟲報告網頁&#xff0c;Firefox 66除了造成Office 365中的PowerPoint文字消失的問題外&#…

PHP全棧學習筆記27

數組概述&#xff0c;類型&#xff0c;聲明&#xff0c;遍歷&#xff0c;輸出&#xff0c;獲取數組中最后一個元素&#xff0c;刪除重復數組&#xff0c;獲取數組中指定元素的鍵值&#xff0c;排序&#xff0c;將數組中的元素合成字符串。 數組概述&#xff0c;數組是存儲&…

Docker : 數據卷(創建、掛載、查看、刪除)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 數據卷 數據卷 是一個可供一個或多個容器使用的特殊目錄&#xff0c;它繞過 UFS&#xff0c;可以提供很多有用的特性&#xff1a; 數據卷…

mac地址和ip地址的區別(轉)

先糾正一下幾個比較模糊的概念&#xff1a;“MAC地址表儲存IP地址”&#xff0c; MAC地址表是二層設備中存儲“MAC地址”和“轉發端口”映射關系的表&#xff0c;并不直接存儲IP地址。 “路由器根據MAC地址來選擇路由進行數據發送”&#xff0c;對于三層設備的三層端口來說&…

你是否發現 職業能力危機,請 警惕

身在職場&#xff0c;你有不有遭遇職業能力危機呢 ? 核心競爭力的增長是職業持續性發展的基礎&#xff0c;隨著年齡的增長和工作經驗的積累&#xff0c;有的職場人士保持著良好的發展勢態&#xff0c;有的卻越來越落伍&#xff0c;競爭力越來越弱。只有能力跟得上變化&#x…

你的GitHub,怎么和我用的不太一樣?

說起代碼托管&#xff0c;相信絕大多數人腦海中浮現出的第一個詞都是“GitHub”。經過多年的發展&#xff0c;GitHub儼然已經成為了代碼托管領域的標簽…隨著國內互聯網環境的優化&#xff0c;互聯網產業鏈的不斷壯大&#xff0c;越來越多的產業被拉入到了互聯網中來&#xff0…

Windows下多個JDK版本的切換方法

問題 因我之前在window中無法命令行輸入&#xff0c;后來發現是電腦中存在多個JDK&#xff0c;導致設置混亂。于是&#xff0c;我繼續深入研究了當電腦存在多個JDK的情況下&#xff0c;如何設置想要的JDK版本。步驟 1.更改環境變量 進入環境變量的配置界面&#xff0c;將JAVA_H…

哈哈哈,只有程序員才懂的黑色幽默 ... ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 也是機緣巧合&#xff0c;讓我一個之前工作從未接觸過程序員的人&#xff0c;現在成天和程序員打交道&#xff0c;要知道&#xff0c;不…

二維數組指針

概括的說&#xff0c;指針其實就是可變數組的首地址&#xff0c;說是可變數組&#xff0c;是 指其包含內容的數量的可變的&#xff0c;并且是可動態申請和釋放的&#xff0c;從而充 分節約寶貴的內存資源。我一向喜歡一維數組&#xff0c;除非萬不得已&#xff0c;我一 般是不用…

運動并不是最好的減肥辦法,控制飲食也不是

運動并不是最好的減肥辦法&#xff0c;控制飲食也不是。 兩者的<有機>結合&#xff0c;才是最好的減肥法。 其實&#xff0c;可以把減肥當作一個體系&#xff1a;這個體系里&#xff0c;有進有出。 攝入過多&#xff0c;排出不夠&#xff0c;便是我大多數朋友——也許…

ONVIF Device Manager修改設備密碼

這個onvif工具可以實時監控畫面&#xff0c;使用起來簡單方便 左側一欄是設備信息&#xff0c;中間上半部分是設備配置設置&#xff0c;下半部分是圖像預覽配置設置。 修改密碼可通過該工具&#xff0c;點擊User management后選擇用戶類型并且修改密碼。

《 圖解 TCP/IP 》讀書筆記

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. WAN &#xff1a;Wide Area Network 廣域網。 LAN &#xff1a; Local Area Network 局域網。 2. TCP/IP 是通信協議的統稱。 3. C…

mysql 數據庫函數入門

轉載于:https://www.cnblogs.com/hwgok/p/10816922.html

函數中的apply,call入門介紹

###函數中的apply,call入門 牽扯到apply,call就要先說一下它們和函數的淵源 Javascript函數既是也是對象 它和其它的javascript對象沒有什么區別。并且每個函數都包含兩個非繼承而來的方法 apply()和call(),這兩個方法都可以間接的調用函數 例如: function f() {console.log(1)…