關于c語言字符串函數和一些內存函數的的簡介

關于c語言字符串函數和一些內存函數的的簡介

求字符串長度的函數

   strlen函數介紹![在這里插入圖片描述](https://img-blog.csdnimg.cn/20190301142458376.jpg)注

在這里插入圖片描述
模擬實現

. [1 ]計數器方式
在這里插入圖片描述
因為strlen 是求字符串長度的函數,所以不能改變字符串本身,所以形參用const修飾
創建一個計數器count,每當跳到下一個字符時,count加一,一直到字符串結束,count中記錄的就是字符串長度
. [2 ] 不創建臨時變量計數器
. 在這里插入圖片描述
此方法用了函數的遞歸思想,每回傳出的參數都是上一個參數加一,也就是每次跳到字符串的下一個字符,當跳到字符串最后一個字符時,返回0,然后逐層返回,最后求出長度

. [3 ]創建一個指針變量
在這里插入圖片描述

長度不受限制的字符串函數

strcpy
在這里插入圖片描述
模擬實現
在這里插入圖片描述
字符串拷貝函數,將src拷貝至dest,不能修改原字符串內容,所以用const修飾
assert函數是斷言,保證指針有效性。整個while循環用來完成復制,src++是先讀取字符再讓指針指向下一個字符
所以
dest++也是如此,當字符串到最后一個字符時while就跳出循環,并返回。

strcmp
在這里插入圖片描述
模擬實現
在這里插入圖片描述
字符串比較函數是按字典序進行比較的,在c中也就是按字符對應的ASCII碼碼值的大小來進行比較,如果前面的大于后面的,則返回大于0的數,小于返回小于0的數,等于返回0.因為只進行比較,所以不能改變原字符串,所以要用const進行修飾。

strstr
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

長度受限制的字符串函數介紹

此類函數是為了防止上一類函數存在緩沖區溢出的情況
strncmp
在這里插入圖片描述

內存操作函數

memcpy
在這里插入圖片描述
此函數因為是內存復制函數,但他并不是按類型復制,而是按字節復制,這個函數有缺點,就是萬一要拷貝到的區域與你要拷貝的區域有重疊,那么會有不可預料的錯誤。

模擬實現
在這里插入圖片描述
此函數有三個參數,一個是要拷貝到的區域的位置,另外一個是要拷貝的區域,還有一個是拷貝多少個字節的大小。
在進行拷貝操作時,由于函數的定義形參的時候,用的時void*任意類型指針,該指針不能進行解引用,所以,如果要操作該類指針里面的值時,要進行強制類型轉換。

memmove
該函數是針對上面的函數有緩沖區重疊的情況。
在這里插入圖片描述
模擬實現
在這里插入圖片描述
此函數較上一個函數多了一個判斷,判斷拷貝的區域與被拷貝的區域是否有重疊,在進行操作時還是要強制類型轉換。

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

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

相關文章

君正T20平臺生成jffs2格式rootfs

基于系統升級的考慮,這兩天在君正T20平臺上折騰如何生成jffs2 格式的rootfs。詳細的過程如下: 1.修改uboot中的分區參數: 修改為rootfs格式為jffs2的,且適當擴大rootfs分區大小。(因jffs2的壓縮比不如只讀的squashfs…

用結構體寫一個簡單的通訊錄

一個簡單的通訊錄 通訊錄應該具備簡單的一些功能 1 增添聯系人 2 刪除聯系人 3 查找聯系人 4 修改聯系人 5 按名字給聯系人排序 6 查看通訊錄 除此之外,應該在實現上還應該具備一些其他的功能函數 比如 初始化通訊錄 這些都是功能函數,而整個函數入口應…

jffs2 啟動的常見的問題

Q:在啟動過程中出現at91sam user.warn kernel: Empty flash at 0x00f0fffc ends at 0x00f10000問題 A:在mkfs.jffs2的時候,加上-e 0x20000指定擦除塊的大小。-e是指定擦除塊的大小,我們使用的nandflash的塊大小為128K字節&#xf…

c動態內存管理

動態內存管理 我們之前要開辟內存用的方法都是定義變量,比如 但是上述開辟內存的方法有兩個特點 1空間開辟大小是固定的 2數組在申明的時候,必須指定數組的長度,它所需要的內存在編譯時分配 malloc和free c中提供一個動態內存開辟函數 這…

JFFS2文件系統掛載過程優化的分析報告

一 問題描述 在上電啟動優化中發現Linux系統下掛載JFFS2文件系統耗時較長,以128M的NOR FLASH為例,用時接近20秒。后續單板的FLASH容量為256M,時間會更長。如此長的掛載時間,會大增加系統的上電啟動時間。希望能對mount功能或JFFS…

右移函數(字符串,數組)

右移函數 以上是數組右移,將int換成char 把數組內容改成字符串就行。

關于jffs2文件系統如何掉電保護

JFFS2 是將節點信息保存在內存中 Flash上日志型文件系統的資料,了解到傳統的基于閃存轉換層(FLT)的文件系統存在的主要問題: 1. 效率低。因為每次都要把要修改的數據所在擦寫塊放入內存,產生了許多不必要的讀操作&…

c中指針簡介

c中指針簡介 首先我們來看一下指針的一些基本概念 ![在這里插入圖片描述](https://img 而對于指針的應用,平常有一些形式,總結了一下大概有這幾種用法 對于以上的幾種用法,我依次給出詳盡的解釋 //這是一個普通的整型變量 1 //首先從P 處開…

判斷一個字符串是否另一個字符串的右移后的

首先我們把需要判斷的字符串傳進來,開辟一塊大小為兩個字符串的長度總和加1的動態的空間,然后后字符串拷貝函數將一個字符串拷貝到開辟空降中,再將這個字符串再次連接到這塊動態的空間中,等于就是將一個字符串拷貝了兩遍。然后比較…

登陸后保持環境變量導出

在嵌入式開發中,要保證在系統登錄后,導出的環境變量依然有效,需要修改如下文件: /etc/profile export PATH/bin:/sbin:/usr/bin:/usr/sbin export PATH/system/bin:$PATH export LD_LIBRARY_PATH/system/lib export LD_LIBRARY_P…

fasync驅動異步通知機制

fasync簡介 編輯異步通知fasync應用于系統調用signal和sigaction函數,簡單的說,signal函數就是讓一個信號與與一個函數對應,每當接收到這個信號就會調用相應的函數。[1]那么什么是異步通知?異步通知類似于中斷的機制,當…

Linux中最常見命令總結

Linux中最常見命令總結 基礎命令 命令使用格式 命令名【選項參數】 【操作對象】Ls -a workspace目錄命令 Ls 默認顯示瀏覽當前文件目錄 -a 顯示所有文件,不忽略以點開頭的文件 Linux下以.開頭的文件是隱藏文件 每個目錄下文件的兩個特殊目錄 . 表示目錄自身…

不帶頭結點的鏈表基礎操作(初始化,增刪改查)

鏈表是什么? **鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括…

fcntl的使用

功能描述&#xff1a;根據文件描述詞來操作文件的特性。 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); [描述] fcntl()針對(文件)描述符提供控…

鏈表面試題1:反轉單鏈表,不帶頭結點。

三個指針p1,p2,p3&#xff0c;p1指向頭結點的前一個結點&#xff0c;也就時指空&#xff0c;p2指向頭結點&#xff0c;p3指向頭結點下一個結點。 p3指向p2的下一個&#xff0c;讓p2指針域指向p1&#xff0c;讓p1挪到p2上&#xff0c;再讓p2指向p3.

dup/dup2函數的用法

系統調用dup和dup2能夠復制文件描述符。dup返回新的文件文件描述符&#xff08;沒有用的文件描述符最小的編號&#xff09;。dup2可以讓用戶指定返回的文件描述符的值&#xff0c;如果需要&#xff0c;則首先接近newfd的值&#xff0c;他通常用來重新打開或者重定向一個文件描述…

鏈表面試題2:編寫代碼,以給定值x為基準將鏈表分割成兩部分,所有小于x的結點排在大于或等于x的結點之前

我們可以&#xff0c;用兩個新鏈表&#xff0c;一個存比基準值大的&#xff0c;另一個存比基準值小的。然后再拼接在一起。 用尾插的方法&#xff0c;首先說小的&#xff0c;創建兩個指針&#xff0c;一個頭&#xff0c;一個尾&#xff0c;再創建個指針跑鏈表&#xff0c;掃描…

文件系統緩存dirty_ratio與dirty_background_ratio兩個參數區別

這兩天在調優數據庫性能的過程中需要降低操作系統文件Cache對數據庫性能的影響&#xff0c;故調研了一些降低文件系統緩存大小的方法&#xff0c;其中一種是通過修改/proc/sys/vm/dirty_background_ration以及/proc/sys/vm/dirty_ratio兩個參數的大小來實現。看了不少相關博文的…

棧和隊列的基本操作(棧和隊列的區別)

數據結構中的棧與內存中的棧的不同 一、數據結構中的堆棧 在數據結構中的堆棧&#xff0c;實際上堆棧是兩種數據結構&#xff1a;堆和棧。堆和棧都是一種數據項按序排列的數據結構。 1.棧就像裝數據的桶或箱子 我們先從大家比較熟悉的棧說起吧&#xff0c;它是一種具有后進先…

Linux I/O 調度方法

操作系統的調度有 CPU調度 CPU scheduler IO調度 IO scheduler IO調度器的總體目標是希望讓磁頭能夠總是往一個方向移動,移動到底了再往反方向走,這恰恰就是現實生活中的電梯模型,所以IO調 度器也被叫做電梯. (elevator)而相應的算法也就被叫做電梯算法. 而Linux中I…