Time of Update: 2018-12-07
在這一節,我想主要來介紹一下C語言操作字串的常用函數。C語言的字串函數的原型都駐留在<string.h>標頭檔中,因此我們在處理字串時,需要引入這個標頭檔。但是,我不希望只是單純地介紹每個函數的用法,如果那樣,看API就可以了,我希望在介紹每個函數時都自己來實現一次。1. strcpy函數string copy,我們先來看一下該函數的用法。#include<stdio.h>#include<string.h>int main(){ char *str1=
Time of Update: 2018-12-07
C/C++中有一個快速排序的標準庫函數 qsort ,在stdlib.h 中聲明,其原型為:void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 使用該函數,可以對任何類型的一維數組排序。該函數參數中,base 是待排序數組的起始地址,nelem 是待排序數組的元素個數,width
Time of Update: 2018-12-07
通常swap(a,b),都是用中間變數public static void Swap1(ref int a, ref int b) { int temp = a; a = b; b = temp; }產生的IL如下(去除ref) .maxstack 1 .locals init ( [0] int32 temp) L_0000: ldarg.0 L_0001:
Time of Update: 2018-12-07
1. 條件編譯條件編譯是指預先處理根據測試的結果來包含或排除程式的片段。2. #if和#endif也不多說,舉個例子就懂了。#define DEBUG 1int main (void){#if DEBUG printf("Hello world");#endif return 0;}其實效果就是類似於這樣的代碼:int main (void){ int debug=1; if(debug) printf("Hello world");
Time of Update: 2018-12-07
園子裡的首頁已經在所謂的C#大論戰和語言大作戰上,風風火火地持續了快一個月了,我想也該告上那麼一段落了。我只在這裡寫下我眼中的看法。1.
Time of Update: 2018-12-07
1. 數組作為函數參數函數是我們學習程式設計語言最基本的東西了,我在此不再贅述。只討論一種特殊情況,就是數組作為函數的參數傳遞。我們都知道,其實在傳遞數組的時候,實際上是傳遞了數組首元素的指標。明確了這一點之後,我們就可以思考下面的問題。既然他只是傳遞了數組首元素的指標,那麼他必然無法知道整個數組的大小,因此,我們如果希望在函數中用到數組的長度,必須要進行顯式傳遞。int Sum(int a[],int size){int i ,sum=0;for(i=0;i<size;i++) {
Time of Update: 2018-12-07
1. typedef在前文中,我們用宏定義來定義了一個BOOL類型,那麼現在就用更專業的方式來定義類型。typedef int Bool;int main (void){ Bool flag=1;if(flag) { printf("True"); }else{ printf("false"); }}typedef 的作用就是類型定義(Type Definition)。類型定義有以下三個優點:1. 易於閱讀。比如我們可以把定義一個Dollar,
Time of Update: 2018-12-07
1. 數組大小我相信,在C#/Java中,更多的人願意用List<T>來取代數組,一方面是List提供了較多的方法,另一方面也無需我們去指定數組的大小。那麼在C語言中,我們既然需要必須指定數組的大小,而一般來講,很多數組大小事我們無法確定並且經常會發生變化的,那麼我們最好的方式就是用宏定義來限定數組的大小。#define SIZE 10int main (void){int a[SIZE];} 如果包含多個數組的話,用宏就很難記憶,那麼我們就可以利用sizeof運算子。int
Time of Update: 2018-12-07
1. 指標的來源在當代,大多數的現代電腦都會把記憶體分割成位元組,每個位元組都有著其唯一的地址。可執行程式由代碼和資料兩部分構成,而程式中的每個變數都佔有著一個或多個位元組,也就是說,每個變數都有著自己的地址。而這個就是指標的來源。其實每個地址就是一個數,但是我們卻不能用數來表示地址,儲存地址,我們需要用指標變數。例如int *p = i,我們就可以說p是指標變數,儲存著變數i的地址。那麼我們說int *p中,p就是指向int 類型對象的指標變數。2.
Time of Update: 2018-12-07
在《Javascript玩轉繼承(二)》中,我使用了原型繼承法來實現Javascript的繼承,那原型究竟奧秘何在。在這篇文章中,我就主要針對原型來展開討論。 拋開Javascript,我們先來看我們熟悉的常規的物件導向語言。在23種設計模式中,大家一定會記得有一種設計模式——原型模式。我們先來看一下結構圖: (原圖引自:http://terrylee.cnblogs.com/archive/2006/01/16/317896.html)
Time of Update: 2018-12-07
1. 指標和數組這個在最初學習C語言時就學過了,在此只是簡單提下。看一段代碼:#define SIZE 10int main (void){int a[SIZE],*p,sum;int i; p=a; sum=0;for(i =0;i<SIZE;i++) { a[i]=i+1; }for(;p<&a[SIZE];p++) { sum+=*p; }
Time of Update: 2018-12-07
如果平時不習慣寫javascript的情況下,使用jquery validator寫起來就是比較頭痛的事情,為瞭解決這一問題所以寫了個針對jquery validator 的c# helper。使用helper後編寫驗證就能得到VS.NET的支援主要是提供感知功能方便編寫。<script> $().ready(function () { on_signupForm();
Time of Update: 2018-12-07
Ant是基於C#編寫的自動更新程式,其主要目的是簡單方便地對.net傳統型應用程式進行自動更新,解決版本更新的煩惱。Ant主要分為三個部分:服務端,管理端和程式端。 服務端主要用於提供檔案更新和下載用 管理端是用於把最新版本的程式更新到服務端 程式端,主要是擷取服務端的檔案資訊把最新的檔案更新到本地程式端使用前需要引用Ant.Component,在程式開始處使用檢測代碼private void Form1_Load(object sender, EventArgs e)
Time of Update: 2018-12-07
在寫任何一個東西的時候都想知道實現後的效能到底怎樣,一般情況下可以通過一個簡單的計時來確定效能是好是壞.但對於編寫網路應用來說確定這東西效能怎樣相對比較複雜一些,有的人會用是否能達到某個頻寬值或是否支援多少串連來確定這效能好不好.在和很多朋友交流的過程發現他們對這方面的瞭解存在一些誤區,誤認為只要把千兆頻寬跑滿或都支援多少個串連接入就行;其實通這兩值來確定一個服務的效能好不好是否可靠呢?下面通過一些測試來看這兩個指標值來衡量效能的可靠性.頻寬對於.NET程式來說跑滿千兆頻寬可以說是一件容易的事情
Time of Update: 2018-12-07
擷取 Windows 版本資料擷取 Windows 系統資訊判斷平台判斷 Windows 95, Windows 98, Windows 98 第二版或 Windows Me 的版本判斷 Windows NT, Windows 2000, 或 Windows XP 的版本編譯範例 --------------------------------------------------------------------------------
Time of Update: 2018-12-07
[int佔4位元組,short佔2位元組] 1.0 回答下列問題:[答案在文章末尾] 1. sizeof(char) = 2. sizeof 'a' = 3. sizeof "a" = 4. strlen("a") =
Time of Update: 2018-12-07
以前孤陋寡聞,以為在.Net平台上的語言都一樣,現在算是開了眼了; 原來真的是那麼不同的啊,就比如C-Omega 文檔原話: “C-Omega是一種強型別的面向資料的語言(Data Oriented Language),橋接了半機構化層次資料如XML,SQL,CTS之間的裂縫,在C-Omega中表面上不同的世界,被用通用的方法串連了起來; 除了Data Integration之外,C-Omega還以基於串連微分(join
Time of Update: 2018-12-07
測試驅動開發允許你在更好的瞭解問題之前不做出任何決定;在具備足夠的關於產品將如何被開發的知識之前,你不需要提出一個完美的架構;一個最簡單的測試:所謂實踐出真知,現在來做一個做簡單的例子;我們不使用任何特殊的工具;一個計算矩形面積和周長的程式:public class Quad { public int Area(int length, int width) { return 0; } }static void Main(string[] args) {
Time of Update: 2018-12-07
Nunit各種不同的Setup和TearDown標記來協助我們頻繁的建立一致的測試環境,這種功能能協助您確保一個測試案例不會對其他任何一個測試案例產生作用(測試案例隔離-Test case isolation),而證明測試用例隔離的最好例子就是以任何順序執行您的測試Nunit的Test Fixture是用來被一個或更多測試案例共用的用來初始化對象或是提供一些相關資源的裝置;按照Nunit的規定,一個Test Fixture就是一個標記了[TestFixture]屬性的類,他的方法提供:
Time of Update: 2018-12-07
有些情況下需要一個調度器專門來處理一些工作,如在網路處理常式中,當接收的資料後把資訊存放到隊列中,儘可能的更快地處理下一接收操作.而接收的資料資訊則由調試器來處理,如資料分析,資料包處理等等工作.既然調度器負責處理工作,那最好給需要處理的工作制定一個規則,方便以後靈活擴充處理.制定規則介面?12345public interface IWorkItem:IDisposable { void Execute(); }其實介面制定很簡單就是一個Execute方法,