re: 如何更改屬性頁向導頁的字體 浪跡天涯 2008-08-19 18:26
呵,客氣!
輸入中文亂碼的問題,有可能是和字符集設置有關,具體原因我也沒碰見過。
re: 如何更改屬性頁向導頁的字體 浪跡天涯 2008-08-19 16:50
我試了,我這是可以輸入中文,而且顯示也不是亂碼的。
re: 轉@QQ自動登錄 浪跡天涯 2008-08-14 16:12
現在qq版本對鍵盤輸入加鎖了,有兩個dll插件,防止輸入密碼時被截獲,這個方式已經不能傳輸密碼進去了
re: 在關機狀態下破解系統密碼的工具源碼 浪跡天涯 2008-07-24 13:29
誰平時都關注這些資訊!?cnBeta?USENIX Security 2008?
re: 很久沒有這種感覺了 浪跡天涯 2008-03-07 16:22
Fox兄,請問貴公司是在北京嗎?是做游戲開發的吧?
re: 再談sizeof()的問題 浪跡天涯 2008-03-05 08:30
@瞇著眼的貓
很感謝瞇著眼的貓 解釋的很詳細!
我先前以為對sizeof()理解的很透徹,但遇到這個union一開始沒有理解透徹,直到在機器上跑一遍以后,才理解清楚。
re: 再談sizeof()的問題 浪跡天涯 2008-03-01 08:42
我的意思不是說sizeof()函數的問題。
我本意也并不是討論各個編譯器的規則。
我是想探討sizeof()求結構struct,union時的規則。
很不厚道,有人在機器上跑了一趟,不過依然謝謝。
union A:
{
int a[5]; //20
char b; //1
double c; //8
}我想的是union中變量共用內存,應以最長的為準,那就是20。可實際不然,sizeof(A)=24,后來一想應該是必須考慮A中各變量的默認內存對齊方式,必須以最長的double 8字節對齊,故應該是sizeof(A)=24。
關于sizeof(B)下篇再續,也希望大家多探討探討,寫下你的想法!
re: 單鏈表逆序輸出 浪跡天涯 2008-02-29 17:08
面試時 切記使用傻傻的方法
我覺得遞歸 可能是最先想到的
第一張方法也很巧妙 已經回答的很好了
re: 通用對話框會導致程序CRUSH? 浪跡天涯 2008-01-31 08:43
網上不是說在已安裝vc的機器上不會出問題,只在沒有安裝過vc的機器上才會出問題。如果是這樣,我的理解是CFileDialog在這兩種環境下的處理不同,一種直接調用,一種基于COM組件
re: vs2005奇怪的斷點無效問題 浪跡天涯 2008-01-30 09:53
斷點無法跟進,彈出“沒有可用于當前位置的源代碼”時,有時候把這個函數刪除了,然后重新添加一次就可以解決。
re: 關于Fedora二三事 浪跡天涯 2008-01-29 09:07
Fedora6 Fedora8 Ubuntu7.04 RedHat AS4都用過,感覺Fedora8界面做到很漂亮,但更新源少;Ubuntu更新安裝軟件很方便。都只是用用,沒有太多的其它經驗。
思想禁錮了,要想有什麼創造那是很難的,這就是我們國家的教育現實。
你的#define 和我們的沒有什么區別,我們的也是這么實現的,你可以看我們的大端小端交換代碼。
re: msdn也有錯? 浪跡天涯 2008-01-28 17:31
可以參考《Effective STL》
條款3:使容器里對象的拷貝操作輕量而正確
容器容納了對象,但不是你給它們的那個對象。此外,當你從容器中獲取一個對象時,你所得到的對象不是容器里的那個對象。取而代之的是,當你向容器中添加一個對象(比如通過insert或push_back等),進入容器的是你指定的對象的拷貝。拷進去,拷出來。這就是STL的方式。
.........
公司比較小氣,我們項目組聯系過一二手IBM RS/6000機器,好像也就一兩萬塊錢,但是由于公司覺得這只是臨時的一個項目,今后沒有這方面的需求,所以不肯出手。所以當時的計劃就是首先把Unix系統完善后,然后集中對網絡通信模塊的數據進行大小端調整。整個實施過程,遇到的問題倒是不大,項目進展的還算順利。
re: 這樣的辭職報告感人嗎? 浪跡天涯 2008-01-25 12:02
新勞動法也是今年剛實行的,而且具體會產生什么影響還不得而知。先前也查過是否提前一個月告知公司,就不算違約,無需繳納任何違約金的問題,但是網上也沒有哪位能給出十分準確的答案,哪位法律大人來解釋解釋?
我的理解是,只要公司無法出具對你進行過任何的培訓記錄,沒有享受公司的額外出資培訓等情況,提前一個月打報告,那么一個月后如果公司還不放你,完全可以向勞動保障部門申請仲裁。
我發這篇文章的本意并不是討論勞動法等問題,其實只是到年末了,感嘆為了一張火車票發愁的無奈...游子苦 游子愁啊!
re: 這樣的辭職報告感人嗎? 浪跡天涯 2008-01-25 10:39
說的輕巧!合同未到期,手頭又有沒完沒了的項目,我看你怎么走?
re: vs2005奇怪的斷點無效問題 浪跡天涯 2008-01-24 16:58
呵,好久以前就遇到過這個問題,將解決方法發到MSN Space上了。MSN Space速度太慢,但是每天搜索這個問題的人還很多,所以就發到這個CPP Blog上來了,希望能給大家一個參考!
re: CMap詳解 浪跡天涯 2008-01-24 15:47
以下是實現忽略大小寫的HashKey函數以及KeyCompare函數:
// 實現忽略大小寫的
template<>
inline bool HS_HashKey<char*>::KeyCompare( char* const&key1, char* const&key2)
{
return stricmp(key1, key2) == 0;
}
template<>
inline unsigned int HS_HashKey<char*>::KeyHash( char* const&lkey)
{
unsigned int nHash = 0;
const char* key = lkey;
while (*key)
{
if(*key >= 'A' && *key <= 'Z')
{
nHash = (nHash<<5) + nHash + *key++;
nHash += ('a' - 'A');
}
else
nHash = (nHash<<5) + nHash + *key++;
}
return nHash;
}
re: 大數據量下CListCtrl的問題 浪跡天涯 2008-01-24 11:35
經過仔細分析,發現CListCtrl處理過程是正確的,之所以造成size()不正確的原因,是因為 m_buffer 相鄰近的變量數組越界破壞了這塊內存區域,因此造成size()不正確,數據錯誤的情況。經過修正,問題已然解決!
那么既然統一了編碼,如何兼容原先各國的文字編碼呢?
這個時候就需要codepage了。
什么是codepage?codepage就是各國的文字編碼和Unicode之間的映射表。
比如簡體中文和Unicode的映射表就是CP936,點這里查看官方的映射表。
以下是幾個常用的codepage,相應的修改上面的地址的數字即可。
codepage=936 簡體中文GBK
codepage=950 繁體中文BIG5
codepage=437 美國/加拿大英語
codepage=932 日文
codepage=949 韓文
codepage=866 俄文
codepage=65001 Unicode UFT-8
最后一個65001,據個人理解,應該只是一個虛擬的映射表,實際只是一個算法而已。
從936中隨意取一行,例如:
0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH
前面的編碼是GBK的編碼,后面的是Unicode。
va_start() va_end()函數應用
1:當無法列出傳遞函數的所有實參的類型和數目時,可用省略號指定參數表
void foo(...);
void foo(parm_list,...);
2:函數參數的傳遞原理
函數參數是以數據結構:棧的形式存取,從右至左入棧.eg:
#include <iostream>
void fun(int a, ...)
{
int *temp = &a;
temp++;
for (int i = 0; i < a; ++i)
{
cout << *temp << endl;
temp++;
}
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = 4;
fun(4, a, b, c, d);
system("pause");
return 0;
}
Output::
1
2
3
4
3:獲取省略號指定的參數
在函數體中聲明一個va_list,然后用va_start函數來獲取參數列表中的參數,使用完畢后調用va_end()結束。像這段代碼:
void TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
{
va_list args;
va_start(args, pszFormat);
_vsnprintf(pszDest, DestLen, pszFormat, args);
va_end(args);
}
4.va_start使argp指向第一個可選參數。va_arg返回參數列表中的當前參數并使argp指向參數列表中的下一個參數。va_end把argp指針清為NULL。函數體內可以多次遍歷這些參數,但是都必須以va_start開始,并以va_end結尾。
1).演示如何使用參數個數可變的函數,采用ANSI標準形式
#include 〈stdio.h〉
#include 〈string.h〉
#include 〈stdarg.h〉
/*函數原型聲明,至少需要一個確定的參數,注意括號內的省略號*/
int demo( char, ... );
void main( void )
{
demo("DEMO", "This", "is", "a", "demo!", "");
}
/*ANSI標準形式的聲明方式,括號內的省略號表示可選參數*/
int demo( char msg, ... )
{
/*定義保存函數參數的結構*/
va_list argp;
int argno = 0;
char para;
/*argp指向傳入的第一個可選參數,msg是最后一個確定的參數*/
va_start( argp, msg );
while (1)
{
para = va_arg( argp, char);
if ( strcmp( para, "") == 0 )
break;
printf("Parameter #%d is: %s\n", argno, para);
argno++;
}
va_end( argp );
/*將argp置為NULL*/
return 0;
}
2)//示例代碼1:可變參數函數的使用
#include "stdio.h"
#include "stdarg.h"
void simple_va_fun(int start, ...)
{
va_list arg_ptr;
int nArgValue =start;
int nArgCout=0; //可變參數的數目
va_start(arg_ptr,start); //以固定參數的地址為起點確定變參的內存起始地址。
do
{
++nArgCout;
printf("the %d th arg: %d\n",nArgCout,nArgValue); //輸出各參數的值
nArgValue = va_arg(arg_ptr,int); //得到下一個可變參數的值
} while(nArgValue != -1);
return;
}
int main(int argc, char* argv[])
{
simple_va_fun(100,-1);
simple_va_fun(100,200,-1);
return 0;
}
3)//示例代碼2:擴展——自己實現簡單的可變參數的函數。
下面是一個簡單的printf函數的實現,參考了<The C Programming Language>中的例子
#include "stdio.h"
#include "stdlib.h"
void myprintf(char* fmt, ...) //一個簡單的類似于printf的實現,//參數必須都是int 類型
{
char* pArg=NULL; //等價于原來的va_list
char c;
pArg = (char*) &fmt; //注意不要寫成p = fmt !!因為這里要對//參數取址,而不是取值
pArg += sizeof(fmt); //等價于原來的va_start
do
{
c =*fmt;
if (c != '%')
{
putchar(c); //照原樣輸出字符
}
else
{
//按格式字符輸出數據
switch(*++fmt)
{
case'd':
printf("%d",*((int*)pArg));
break;
case'x':
printf("%#x",*((int*)pArg));
break;
default:
break;
}
pArg += sizeof(int); //等價于原來的va_arg
}
++fmt;
}while (*fmt != '\0');
pArg = NULL; //等價于va_end
return;
}
int main(int argc, char* argv[])
{
int i = 1234;
int j = 5678;
myprintf("the first test:i=%d\n",i,j);
myprintf("the secend test:i=%d; %x;j=%d;\n",i,0xabcd,j);
system("pause");
return 0;
}