C 問題點摘錄(持續更新)

2021-05-27 21:07:41 字數 3915 閱讀 3714

1.一般如果有比較大小的時候。使用unsigned來比較,這個和預設的比較結果相同。

2.定義bool型別的值時。預設的值時ture的。

3.如果有無用的函式引數,可以採用巨集命令無視掉。unreferenced_parameter()

4._strlwr(buf);使用_strlwr_s(buf, sizeof(buf));替換

5.sscanf( tokenstring, "%c", &c );用sscanf_s( tokenstring, "%c", &c, sizeof(char) );替換

6.uint winapi gettempfilename(

__in   lpctstr lppathname,//路徑

__in   lpctstr lpprefixstring, //臨時檔名的頭部

__in   uint uunique,//0就可以了,有很多好處

__out  lptstr lptempfilename

);建立磁碟上唯一命名的零位元組的臨時檔案並返回該檔案的完整路徑。建立帶 .tmp 副檔名

如果使用 gettempfilename 方法建立超過 65535 個檔案但不刪除以前的臨時檔案,則將引發ioexception。

如果沒有提供唯一的臨時檔名,則gettempfilename 方法將引發ioexception。

要解決此錯誤,請刪除所有不需要的臨時檔案。

失敗返回0.

7.dword winapi gettemppath(

__in   dword nbufferlength,

__out  lptstr lpbuffer

);獲取臨時資料夾。返回字串長度。包含「/」符號

void getmydocumentfolder(cstring &m_folder)

pmalloc->release();

m_folder = (lpctstr)szinitialfolder ;}}

獲取臨時資料夾路徑

更新版:

void gettempfile(

cstring strfix,     // top of 2 characters to be make file name

cstring &strtempfilename  // file name (full path))}

if ( !bsuccess )

strtempfilename = (cstring)sztempfilename ;

}8.16進製制與10進製互換

int hex2num(char hex)

else if(work >= 'a' && work <= 'f')

else if(work >= 'a' && work <= 'f')

return result;

}char num2hex(int num)

else if(work >= 0x0a && work <= 0x0f)

return result;

}//0123456789abcdef"→0x01, 0x23,0x45,0x67,0x89,0xab,0xcd,0xef

bool str2hex(char* src, char* dst)

buff[i/2] = (h<<4) + l;

}if(result)

memcpy(dst, buff, len);

return result;

}//0x01, 0x23,0x45,0x67,0x89,0xab,0xcd,0xef→"0123456789abcdef"

bool hex2str(char* src, char* dst, unsigned len)

buff[i*2] = h;

buff[i*2 + 1] = l;

}if(result)

memcpy(dst, buff, len * 2);

return result;

}9.判斷版本

int decideosversion() 

}return info.dwmajorversion ;

}新版本

osversioninfoex sverinfo;     

dwordlong dwlconditionmask = 0;     

sverinfo.dwosversioninfosize = sizeof( osversioninfo );     

// initialize the osversioninfoex structure.     

zeromemory(&sverinfo, sizeof(osversioninfoex));     

sverinfo.dwosversioninfosize = sizeof(osversioninfoex);     

sverinfo.dwmajorversion = 5; // xp     

sverinfo.dwminorversion = 1; // xp     

= 0;     

// initialize the condition mask.     

ver_set_condition( dwlconditionmask, ver_majorversion, ver_greater_equal );     

ver_set_condition( dwlconditionmask, ver_minorversion, ver_greater_equal );     

ver_set_condition( dwlconditionmask, ver_servicepackmajor, ver_greater_equal );     

if (verifyversioninfo(&sverinfo, ver_majorversion     

| ver_minorversion  

| ver_servicepackmajor,  

dwlconditionmask) != false)  else

11.預設debug時候的字串填充是fe,(msdn上有描述,為了更好的找到錯誤)如果要忽略這個技能,

可以設定成自己想要的填充符,如果要填充0,定義下面的巨集

_crtsetdebugfillthreshold( 0 );

12.時間函式的理解(個人,非官方)

time_t time(     time_t *timer   );獲取當前系統時間,跟時區有關。

struct tm *gmtime(      const time_t *timer   );獲取time_t的時間到tm型別。會根據系統減去多餘的時區時間恢復到utc時間。

time_t mktime(   struct tm *timeptr );把當地時間以格式化輸出。

13mutex運用(createmutex許可權不夠會返回null)

int getmutexobject( handle* h_mutex, char * mutexname, bool * isalreadyexist )

else

*h_mutex = createmutex(

null,

false,

mutex_name

);dword err = ::getlasterror();

if(( err == error_already_exists )||( err == error_access_denied))

(*isalreadyexist) = true;

}return status;

}void releasemutexobject( handle* h_mutex )

外部使用範例

handle hd2;

bool bflag = false;

getmutexobject(&hd2, mutex_all, &bflag);

if(!bflag)

問題 持續更新

第三方庫 fno objc arc 深拷貝 淺拷貝 copy,mutablecopy kvc mvc 愛限免中星星個數的問題 首先必須先清空 asi封裝的兩個問題 block 聯想 c語言的函式指標 函式指標的宣告 首先要區分好變數名和資料型別 拷貝 加括號 換名 加星號。通過指標呼叫函式 指標名 ...

實習 C 知識點(持續更新)

vector 定義乙個二維陣列並初始化 方法1 vectorint vec 5,vector int 6 0 方法2 vectorint array m 這個m一定不能少 vectorarray m 初始化乙個m n的二維陣列 for int i 0 i array i resize n vecto...

摘錄 關於spring的註解(持續更新中)

關於註解 1.resource 感覺要是new就在 頭上用到 2.scope prototype 域多為非單例 3.component service 多用在service的實現類中 controller 用在action中 repository 多用在dao的實現類中 簡介 1 value met...