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