C標準庫常用函式實現

2021-08-07 23:04:14 字數 3236 閱讀 8865

size_t mystrlen(const

char *s)//s指向的內容唯讀

//++sc更加符合人的思維就是需要它改變。

int mystrncmp(const

char *s1 , const

char *s2 , size_t n)

/*

從s2執行的資料複製最多n個字元到s1指向陣列中.

如果s2比n短,則s1執行資料後面新增空字元,直到寫入n個字元.

直接上**.

查詢乙個字元c在另乙個字串str中末次出現的位置(也就是從str的右側開始查詢字元c首次出現的位置)

查詢字元c在str末次出現的次數。如果str中沒有c,返回null。如」/bin/more」,那麼返回指向第二/。

char *mystrrchr(const

char *str, char c)

}int main(int argc , char *argv)

輸出:/more

/*

將s2拷貝到s1的後面

今天,將利用這個程式,徹底解決小端模式,大端模式,以及記憶體對齊,memset如何設定資料大小。。。。。。

#include 

void *mymemset(void *s , int c , size_t n)

int main(void)

foo;

char char_test[4];

int int_test[4];

int cnt;

foo.a = 20;

foo.b = 30;

foo.c = 50;

cnt = sizeof(foo);//12

cnt = sizeof(char_test);//4

cnt = sizeof(int_test);//16

memset(&foo , 0 , sizeof(foo));//0 0 0

memset(&foo , 1 , sizeof(foo));//0x1010101 0x1010101 0x1

memset(char_test , 0 , sizeof(char_test));//0 0 0 0

memset(char_test , 1 , sizeof(char_test));//1 1 1 1

memset( int_test , 0 , sizeof(int_test));//0 0 0 0

memset( int_test , 1 , sizeof(int_test));//0x1010101 0x1010101 0x1010101 0x1010101

exit(0);

}//這個例子出現這種問題,都是因為多位元組變數涉及大小端以及記憶體對齊問題。

乙個c標準程式資料物件佔據以下3種型別儲存空間:

1、分配的靜態儲存空間並進行初始化,如沒初始化,則自動初始化為0

2、每乙個塊,分配在棧中,假如沒有初始化,則其初始化內容不確定。塊結束,占用空間釋放。這是動態儲存區(先進後出)

3、只有當呼叫malloc,calloc,realloc分配才可控,那就是堆,這些物件一直存在指定free或者程式結束。

int atoi(const

char *s)

/*

* 函式名:itoa

* 描述 :將整形資料轉換成字串

* 輸入 :-radix =10 表示10進製,其他結果為0

* -value 要轉換的整形數

* -buf 轉換後的字串

* -radix = 10

* 輸出 :無

* 返回 :無

* 呼叫 :被usart1_printf()呼叫

*/static

char *itoa(int

value, char *string, int radix)

if (!value)

/* if this is a negative value insert the minus sign. */

if (value

< 0)

for (i = 10000; i > 0; i /= 10)

}/* null terminate the string. */

*ptr = 0;

return

string;

}

這裡設計串列埠重定向的問題,嵌入式裡面常常使用printf進行串列埠重定向功能。

mark乙個 有時間好好記錄這個 搞懂搞清楚。

/*

字串格式化命令,要格式化的資料寫入某個字串中。這裡沒有指定緩衝區長度所以可能會導致緩衝區溢位的問題,破壞了呼叫函式的記憶體區域。

*/int

sprintf (char *__restrict __s,const

char *__restrict __format, ...);

/*sprintf的安全版本。

最多從源串中拷貝maxlen-1個字元到s中,然後在s末尾後面加乙個'\0'表示字串。因為指定了緩衝區的長度,所以緩衝區拷貝不會溢位,這點很重要。注意此函式返回是源串的長度。

*/int

snprintf (char *__restrict __s, size_t __maxlen,

const

char *__restrict __format, ...);

記憶體對齊和sizeof的實現。

C常用標準庫及函式

常用標頭檔案 stdio.h stdlib.h ctype.h string.h math.h system.h 1 stdio庫 主要功能是輸入輸出操作,包括檔案輸入輸出,標準輸入輸出。輸出函式 int puts const char str 把乙個字串寫出到標準輸出 int printf cha...

C 標準庫常用函式彙總

include指令 排序sort vec.begin vec.end 反轉reverse str.begin str.end include指令 定義了三個型別來支援 檔案io 從乙個給定檔案讀取資料 ifstream fin pose.txt 向乙個給定檔案寫入資料 ofstream 讀寫給定檔案...

C語言標準庫的常用函式

int printf const char format,傳送格式化輸出到標準輸出 stdout。int sprintf char str,const char format,傳送格式化輸出到str所指向的字串。double atof const char str 把引數str所指向的字串轉換為乙個...