C 幾個小函式

2021-06-18 08:36:38 字數 1426 閱讀 2156

之前看書,遇到幾個程式設計題,要實現一些庫自帶的函式。於是動手寫了寫,並且做了一些測試。今晚在測試的時候,還發現了一些其他記憶體分配的問題,順路一起記下。這裡只寫了字串轉整型,字串賦值函式。

#include /*c庫函式,將字串轉換成整型*/

int my_atoi(const char* p);

/*c庫函式,複製源字串到目的字串,返回新串*/

char *my_strcpy(char *dest, const char *src);

/*c庫函式,返回子串*/

char *my_strstr(const char *s1, const char *s2);

原始檔

#include #include #include "deamo_functions.h"

using namespace std;

int my_atoi(const char* p)

return neg_flag ? 0 - res : res;

}char *my_strcpy(char *dest, const char *src)

char *my_strstr(const char *s1, const char *s2)

s1++;

} return null;

} else

return (char *)s1;

}int main()

{ int result;

result = my_atoi("3.2");

cout<

本來測試my_strcpy函式是照下面那樣寫的。

cout<

char* dest = "123456789";

cout結果出現了下面的錯誤。發現src和dest的位址非常相近,如果src往後移動,就會指向dest了。這樣的話產生位址訪問出錯了。想想記憶體分配的幾條:

1)靜態分配,加static的採用全域性分配。

2)堆內分配,函式執行是編譯器自動分配的。

3)棧內分配,有程式設計師動態使用malloc或new分配

那這個是屬於哪一種呢。查了一下,貌似字元常量也單獨扔到一塊去。也就是說,dest和src現在指向了兩個常量字元。所以,在my_strcpy函式中移動dest,src時,出現位址訪問衝突了。所以,我們需要動態分配記憶體給dest。

上圖可以看出,dest和b是用new分配的,存放在相近的一段位址內。而src和a分別指向字串常量,因此存放在另外一段相近的位址區域內。

C語言 關於函式指標的幾個小測試

include void func void intmain func是函式名,p func是指向該函式的指標,那麼有 func 004015c0 func 004015c0 func 004015c0 p func 004015c0 p func 004015c0 p func 0061fecc可...

幾個常用的小函式2

opt1 小數 opt2 負數 當opt2為1時檢查num是否是負數 當opt1為1時檢查num是否是小數 返回1是正確的,0是錯誤的 function chknbr num,opt1,opt2 當最後一位為.時出錯 if num.charat i 1 for j 0 j1 if num.chara...

幾個有用的R小函式

最近寫的 基本是r指令碼了,越發感到r的強大。現在用它做一些資料分析以及進行一些模擬。收幾個常的函式在這裡。i.將所有為0的資料替換為100 res2 valuex res2 valuex in 0 ii.將na替換為0 res2 valuex is.na res2 valuex cdf 累積分布函...