Time of Update: 2017-01-13
今天特別記錄下。snprintf的函數原型為:int snprintf(char *str, size_t size, const char *format, …);說明:之前以為snprintf的傳回值是實際寫入到str字串的長度,其實不然case 1 : 如果要輸出的字串的長度< size, 主要這裡不包括=, 因為snprintf會自動將加入到str中,snprintf的傳回值是實際str的長度case 2 : 如果要輸出的字串長度>= size,
Time of Update: 2017-01-13
但稍微留心一下就會發現現有的MFC庫或者C++標準庫中的相關類聲明中explicit出現的頻率是很高的。瞭解explicit關鍵字的功能及其使用對於我們閱讀使用庫是很有協助的,而且在編寫自己的代碼時也可以嘗試使用。既然C++語言提供這種特性,我想在有些時候這種特性將會非常有用。按預設規定,只用傳一個參數的建構函式也定義了一個隱式轉換。舉個例子:(下面這個CExample沒有什麼實際的意義,主要是用來說明問題) 代碼如下複製代碼 //Example.h#pragma
Time of Update: 2017-01-13
代碼如下複製代碼 #include <iostream>using namespace std;class num{public:int x;num(){n=1;cout<<”建構函式執行!n”;}num(int i){n=i;cout<<”帶參數的建構函式執行!n”;}num(const
Time of Update: 2017-01-13
常變數: const 類型說明符 變數名常引用: const 類型說明符 &引用名常對象: 類名 const 對象名常成員函數: 類名::fun(形參) const常數組: 類型說明符 const 數組名[大小] 常指標: const 類型說明符* 指標名 ,類型說明符* const 指標名首先提示的是:在常變數(const 類型說明符 變數名)、常引用(const 類型說明符
Time of Update: 2017-01-13
一個具有10個元素的數組 1 3 3 2 5 1 1 5 6 6,刪除相同元素後後變為 1 3 2 5 6,請大蝦們幫下忙,最好給出全部程式,必須是刪除法!例 代碼如下複製代碼 void delete_listi(Node list,int i){ Node p=list;q; int j;/*設輔助迴圈變數*/ if(i==1) list=list->next; else { q=p;p=p-&
Time of Update: 2017-01-13
C語言while語句的用法while語句的一般形式為:while(運算式)語句其中運算式是迴圈條件,語句為迴圈體。while語句的語義是:計算運算式的值,當值為真(非0)時, 執行迴圈體語句。其執行過程可用下圖表示。【例6.2】用while語句計算從1加到100的值。用傳統流程圖和N-S結構流程圖表示演算法 代碼如下複製代碼 main(){ int i,sum=0; i=1; while(i<=10
Time of Update: 2017-01-13
若一個整數a為另一個整數b的平方,則稱a為完全平方數,現在輸入n個正整數,判斷他們中有幾個是完全平方數這道底在小資料的時候可能比較簡單,但遇到大資料的時候,就顯得心有餘而力不足了。首先我們需要用long
Time of Update: 2017-01-13
想要把丟掉的東西撿起來,還是很辛苦啊,今天我就發現,我連char* 和 char []的區別都不知道。很多人覺得這兩個定義效果一樣,其實差別很大。以下是個人的一些看法,有不正確的地方望指正。本質上來說,char *s定義了一個char型的指標,它只知道所指向的記憶體單元,並不知道這個記憶體單元有多大,所以:當char *s = "hello";後,不能使用s[0]='a';語句進行賦值。這是將提示記憶體不能為"written"。當用char
Time of Update: 2017-01-13
最近再寫一個hsf的代理程式。需要使用libcurl與後端的nginx通訊。程式編寫過程中遇到一個蹊蹺的問題。調用 code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &rsp_code); 後會報段錯誤。範例程式碼如下: 代碼如下複製代碼 static int http_proxy(std::string domain, std::string path, std::string params,
Time of Update: 2017-01-13
題目如圖:題目意思很明顯了,我們的思路其實也挺簡單的,換句話說,刪掉一個然後重構數組,補上那個空,一個個字元推進一格就行了嘛,不用想得太複雜(簡單的來說就是偷懶)。 代碼如下複製代碼 #include<stdio.h>#include<string.h>void delchar(char s[], char c);int main(void){ char c; char s[80]
Time of Update: 2017-01-13
當然那題目給出的輸入方式是不斷空格的,那麼難道因為這個我們就需要使用%d %d %d直到10嗎?實際上並不需要,直接輸入就可以了,緩衝區這個概念應該還記得,當scanf()讀到空白字元(包括enter和space),剩下的並不是直接丟棄,而是存在緩衝區,而讀取的時候從第一個非空白字元開始讀取,所以,我們使用迴圈結構,一路用空格就行了,直到清空了緩衝區。我們來看看這個程式的源碼吧 代碼如下複製代碼 #include <stdio.h>#define NUM
Time of Update: 2017-01-13
就算是非常有經驗的C程式員,也對那些比簡單數組/指標更複雜一些的聲明感到頭疼。比如說,下面這個是一個指標的數組,還是一個數組的指標?int *a[10];下面這貨到底是什嗎?int (*(*vtable)[])();當然了,這貨是一個指標,指向一個數組,這個數組的每個元素是一個指標,指向一個函數,函數的傳回值類型是int
Time of Update: 2017-01-13
問題來源於今天三班一個學霸問我,他的程式沒法運行,什麼情況?那來看看他寫的程式,雖然看著有些不舒服。 代碼如下複製代碼 #include <stdio.h>#include <string.h>int main(){ char tra(char str[]); char b[80]; gets(b); puts(tra(b));return 0;}char tra(char str[]){ char
Time of Update: 2017-01-13
題如下圖所示 題目意思很明顯了,我們的思路其實也挺簡單的,換句話說,刪掉一個然後重構數組,補上那個空,一個個字元推進一格就行了嘛,不用想得太複雜(簡單的來說就是偷懶)。 代碼如下複製代碼 #include<stdio.h>#include<string.h>void delchar(char s[], char c);int main(void){ char c; char
Time of Update: 2017-01-13
題目:編寫一個函數,返回一個double數組中最大的和最小的數之間的差值,並在一個簡單的程式中測試這個函數。對於題目無感,很容易,只是有一點疑惑,因為答案寫的時候是 代碼如下複製代碼 printf("The gap between max and min is: %gn",gap( array, WIDTH)); 感覺很神奇,%g是什嗎?在我的筆記-說明符中並沒有記錄,然後翻到書上的章節裡,也沒有詳細介紹,只是把它歸類為解釋成浮點型。結果輸出:2.69.
Time of Update: 2017-01-13
函數名: scanf 功 能: 執行格式化輸入 用 法: int scanf(char *format[,argument,...]);scanf()函數是通用終端格式化輸入函數,它從標準輸入裝置(鍵盤) 讀取輸入的資訊。可以讀入任何固有類型的資料並自動把數值變換成適當的機內格式。其調用格式為:
Time of Update: 2017-01-13
題目: 代碼如下複製代碼 #define N 2#define M N+1#define NUM 2*M+1main( ){ int i;for(i=1;i<=NUM;i++) printf(“%dn”,i);}該程式中的for迴圈執行的次數是( )A) 5 B) 6 C) 7 D) 8 答案是6,跑過以後怎麼都不理解,這是因為忽略了#define的重大不同。#define進行的其實是簡單的代入,
Time of Update: 2017-01-13
什麼是整型溢出C語言的整型問題相信大家並不陌生了。對於整型溢出,分為無符號整型溢出和有符號整型溢出。對於unsigned整型溢出,C的規範是有定義的——“溢出後的數會以2^(8*sizeof(type))作模運算”,也就是說,如果一個unsigned char(1字元,8bits)溢出了,會把溢出的值與256求模。例如:unsigned char x = 0xff;printf("%dn", ++x);上面的代碼會輸出:0
Time of Update: 2017-01-13
遞迴在C 關於遞迴中講過了一些知識,但是在寫的時候我還是遇到了一些麻煩,而普通的迴圈卻比較好想。先來看看普通的版本: 代碼如下複製代碼 #include <stdio.h>double power(double n, double p);int main(void){ double n, p; printf("Please input the number you need to power: "); scanf(
Time of Update: 2017-01-13
今天又做到一道題,在scanf()和printf()時對double的處理再度糾結。 代碼如下複製代碼 double a, b; printf("Please input two numbers(use space to divide): "); scanf("%lf%lf", &a, &b); printf("1/(1/a+1/b)/2= %fn",