21.說明乙個指標 uint8_t p;
p = &ddrb;
編譯提示 警告:assignment discards qualifiers from pointer target type
這是什麼型別的警告。
ddrb是乙個指向常量的指標
22.strcmp("t恤衫", "t恤");返回結果不為零。
strncmp("t恤衫", "t恤",strlen("t恤"));返回結果為零。why ?????????????
23.出現了這個錯誤:stray '/161' in program
原來是因為那行出現了全形字符.
24.最近遇到乙個奇怪的問題,**中的中文注釋能使程式出錯!!!
試看如下的**:
int main()
執行的結果居然是:a=0 b=0
分析後發現中間的賦值語句被當成了注釋,忽略掉了。
請問各位大蝦,是否遇到此現象?怎麼解釋?怎麼避免此現象?
編譯環境是vc++6.0。
往上人普遍認為是編譯器在判斷字元編碼的時候出錯。
有人發現/*和*/之間的字元是奇數就會出錯。
25.名稱:
sscanf() - 從乙個字串中讀進與指定格式相符的資料.
[編輯本段]函式原型:
int sscanf( const char *, const char *, ...);
int scanf( const char *, ...);
[編輯本段]標頭檔案:
#include
[編輯本段]說明:
sscanf與scanf類似,都是用於輸入的,只是後者以鍵盤(stdin)為輸入源,前者以固定字串為輸入源。
第乙個引數可以是乙個或多個 ]type | ' ' | '/t' | '/n' | 非%符號}
注:1、 * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)
2、表示a,b,c中選一,[d],表示可以有d也可以沒有d。
3、width表示讀取寬度。
4、:引數的size,通常h表示單位元組size,i表示2位元組 size,l表示4位元組size(double例外),l64表示8位元組size。
5、type :這就很多了,就是%s,%d之類。
6、特別的:%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值
[編輯本段]支援集合操作:
%[a-z] 表示匹配a到z中任意字元,貪婪性(盡可能多的匹配)
%[ab'] 匹配a、b、'中一員,貪婪性
%[^a] 匹配非a的任意字元,貪婪性
[編輯本段]例子:
1. 常見用法。
char buf[512] = ;
sscanf("123456 ", "%s", buf);//此處buf是陣列名,它的意思是將123465以%s的形式存入buf中!
printf("%s/n", buf);
結果為:123456
2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
sscanf("123456 ", "%4s", buf);
printf("%s/n", buf);
結果為:1234
3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s/n", buf);
結果為:123456
4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
sscanf("123456abcdedfbcdef", "%[1-9a-z]", buf);
printf("%s/n", buf);
結果為:123456abcdedf
5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。
sscanf("123456abcdedfbcdef", "%[^a-z]", buf);
printf("%s/n", buf);
結果為:123456abcdedf
6、給定乙個字串iios/12ddwdff@122,獲取 / 和 @ 之間的字串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中
sscanf("iios/12ddwdff@122", "%*[^/]/%[^@]", buf);
printf("%s/n", buf);
結果為:12ddwdff
7、給定乙個字串「「hello, world」,僅保留world。(注意:「,」之後有一空格)
sscanf(「hello, world」, "%*s%s", buf);
printf("%s/n", buf);
結果為:world
%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了
如果沒有空格則結果為null。
sscanf的功能很類似於正規表示式, 但卻沒有正規表示式強大,所以如果對於比較複雜的字串處理,建議使用正規表示式.
26.type enum bool;
這樣一行**編譯的時候出現如下錯誤
error: expected identifier before numeric constant
說的是數字常量前應該有標誌符,但是false就是標誌符啊。
什麼原因呢?
可能是在這行之前有#define false 0
這下明白了吧。
當多人協作,使用其他的庫就可能出現這種情況,所以盡量少用巨集吧
27.qtextcodec
qtextcodec 類提供文字編碼之間的轉換。
qt使用unicode來儲存,繪製以及操作字串。在很多情況下,你可能想要使用不同的編碼方式來處理資料。例如大部分的日語檔案都被儲存在shift-jis或者 iso2022的檔案中,而俄羅斯的使用者常常使用koi8-r或者cp1251編碼方式。qt提供了乙個qtextcodec 類集合來從unicode格式轉化到相應的格式。
**部分
#include
#include
#include
#include
int main()
file.close();
}return 0;
}**中的主要改動就是黃底的部分
意思就是創立乙個中文gbk編碼樣式,然後按照這種方式來把讀入的檔案流進行重新編碼,這樣中文就可以順利輸出了,不信你可以試一試,哈哈,先介紹這麼多,下次有什麼下次再寫啦。
28.今天剛剛裝了qt,並執行了qt的乙個簡單的example,然後執行了生成在/debug 資料夾下的 *.exe 檔案,但雙擊執行就提示「沒有找到mingwm10.dll,因此這個程式未能啟動。重新安裝應用程式可能會修復此問題。」 這個問題可能是環境變數沒設定好,可以通過:我的電腦->屬性->高階->環境變數來修改path,這樣能永久修改path。現在我把"c:/qt/2009.04/mingw/bin;c:/qt/2009.04/qt/bin"加入到path後,可以執行了。
下面來看看mingwm10.dll的作用:
mingw的全稱是minimalistic gnu for windows,它提供了基於gnu gcc 和其他相關程式( make、autoconf 等等)構造win32 程式所必需的標頭檔案和庫。也許你首先會想到cygwin。兩者都是可以將unix 下程式在win32下編譯執行的辦法。但所不同的是,cygwin中是將完整的posix 系統呼叫對映到本地api,使用乙個模擬posix 呼叫的dll。因此在實際執行時的效率比不上本地編譯**。另外一點:cygwin的license 是gpl,也就是說你在cygwin上平台的**必須開放。(這個是很難讓人接受的,僅僅因為移植**就要開放原始碼)
而mingw 與cygwin的上述兩點恰好相反,它將**編譯成win32 本地**,使用msvcrt.dll的c執行時庫。而且mingw的其他執行庫不以gpl license保護,這也意味著你使用mingw編譯的**不必公開原始碼。msvcrt.dll本身是隨win32平台發行的,因此這是乙個完全免費的環境。
29.使用qfile::readline()時,發現這函式把每一行最後的換行符也讀取了
30.qt designer編輯ui介面,若修改右側的objectname會提示invalid use of undefined type "ui:mainwindow".解決辦法是把objectname改為mainwindow.
注意,使用objectname右側的恢復鍵只能把objectname恢復為mianwindow,而不是mainwindow。
GPU程式設計筆記(2)
2009 02 02 19 52 高階渲染語言基礎 1 hlsl語法與c語法非常類似。2 資料型別 bool int 32位signed half 16位float float 32位float double 64位float 3 變數宣告 與c一樣 4 型別修飾 可以使用const,與c 一樣 r...
Windows程式設計筆記2
1.關於hdc hdc hdc hdc getdc hwnd for int i 0 i 20 i releasedc hwnd,hdc getdc 與releasedc 一起使用。不能用於beginpain hdc beginpaint hwnd,ps textout hdc,0,0,paintd...
網路程式設計筆記2
tcp udp socket程式設計步驟 sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw windows環境下tcp udp程式設計步驟 1.基於tcp的socket程式設計是採用的流式套接字。在這個程式中...