當前位置:首頁 » 編程語言 » C語言里sz是什麼意思
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言里sz是什麼意思

發布時間: 2022-05-27 04:24:49

『壹』 在c語言中定義一個字元串 char p=szthank return szthank+3 是什麼意思 具體什麼題目我忘了

看這個szthank寫法,應該是個字元串數組吧,後面szthank + 3 是返回這個數組的第3個元素的地址。

『貳』 什麼是動態輸入字元串,C語言。是多個輸入嗎

在C語言中,字元串是以連續的位元組流表示的,並且以 '\0' 結尾,C語言標准庫中也提供了很多函數來操作這種形式的字元串,比如,求字元串長度 strlen( ),求子串strstr( ),字元串拷貝strcpy( )等等,但是,這些函數並不安全,很可能給系統或應用程序帶來嚴重的問題,如棧溢出等,C語言字元串中並沒有記錄操作系統為其分配的長度,用戶必須自己將字元串長度保存在其他的變數中,很明顯如果操作不當就會產生錯誤,如臭名昭著的緩沖區溢出。
其他語言中的字元串類型通常在存儲字元串本身時也保存了字元串長度,如Pascal,這樣做的好處是字元串也可以以空字元'\0'結尾,但也會產生緩沖區溢出錯誤,本文實現了一個簡單的動態字元串庫,首先考慮一下,採用什麼樣的數據結構可以避免緩沖區溢出問題呢,為簡化起見,我們定義「字元串」為內存中無類型的位元組流,因此可以避開本地化和Unicode等概念,首先定義數據結構如下:

pstr 是指向字元串的指針,str_sz 是字元串長度,而 buf_sz則是包含該字元串的緩沖區長度。
接下來一個問題就是為字元串分配存儲空間,由於內存分配可能失效,所以我們需要檢查內存分配是否成功,一種可行的方法是在分配函數中返回錯誤碼,但是,這樣設計的API不太簡潔實用,另外一個可選方案是事先注冊一個回調函數,在內存分配失敗時再調用該函數,但如果多個客戶程序同時申請內存,該方法也會失效,C++中我們可以使用異常來處理這種情況,但是 C 不支持異常,所以該方法也不太現實。其實,某些其他的標准庫代碼也有類似的問題,如數學庫中某個函數對一個負數進行求根運算,返回結果本來是double,為了表明函數調用出錯,我們可以讓函數返回NaN(Not a Number),因此程序在需要檢查該函數調用是否出錯時可以檢查返回值。

『叄』 在C++中 sz_Or_Ord 數據類型的定義在哪裡什麼意思如何使用望高手指點,謝謝!

在MSDN上搜索sz_Or_Ord,發現它只出現在DLGITEMTEMPLATEEX structure‎和DLGTEMPLATEEX structure‎的裡面。它的含義是一個以NULL結尾的Unicode字元串。下面是MSDN的解釋:
A variable-length array of 16-bit elements. If the first element of this array is
0xFFFF, the system treats the array as a null-terminated Unicode string.

『肆』 C語言中atoi(szBuffer)是什麼意思

atoi 將字元串轉化為整形
atof 將字元串轉化為浮點型
atol 將字元串轉化為長整形

規則就是從第一個0--9的字元開始 到第一個非0-9的字元結束

『伍』 在C語言中,什麼是動態存儲,什麼是靜態存儲

動態存儲是auto關鍵字,例如我們定義的int
a;
默認就是動態存儲,具體應該是
auto
int
a;一般是用於函數參數,局部變數,超出作用域范圍會失效,變數產生在動態存儲區
靜態存儲時static關鍵字,例如,我們定義一個
static
int
a;
就是存儲在靜態存儲區,相當於一個全局變數
一樓的理解出現了問題

『陸』 在c語言中(%s\n\n,s=='c'sz:sz1)的意思

該語句的作用,即輸出表達式 s == 'c' ? sz : sz1 的值。
該表達式是一個條件表達式,用到了條件運算符,條件運算符的一般形式為<表達式1>?<表達式2>:<表達式3>;
其意義是:先求解表達式1,若為非0(真),則求解表達式2,將表達式2的值返回。若為0(假),則求解表達式3,將表達式3的值返回。
因此,就表達式 s == 'c' ? sz : sz1 而言,先判斷 s == 'c' 是否成立,是則返回 sz 的值(最終輸出 sz 的值),否則返回 sz1 的值(最終輸出 sz1 的值)。

『柒』 #define szSTRN 40在C語言中是定義什麼

像簡單的宏#define
pi
3.14159等一般定義為常量const
double
pi
=
3.14159;
而像#define
(x)
(x+2)之類的宏,在c++中為了保證效率,一般使用內聯函數來替代。

『捌』 C語言中常見的英語單詞縮寫

暈 這些都是英語的縮寫,英語差的話,要靠平時的積累,除此之外沒有什麼辦法了.
buf buffer 的縮寫,緩沖的意思吧.
sum 總數, 和的意思,一般用計算和用的.
deno (是demo吧?)演示 的意思
area 面積的意思吧
cloum 這個不會,好像也沒有這個詞(幫你查了字典了)
sprt (Sequential Probability Ratio Test 順序概率比測試 ???????)
這個應該是 sort 吧?排列,分類, 揀選的意思.
prime 最初, 青春, 精華 的意思

這些都是根據命名習慣決定的,下面的資料可以參考下:(一定對你有幫助的)

匈牙利命名法

由於匈牙利風格信息冗餘,並與編碼規范的其它條款沖突,所以它的存在僅限於VC中。
下面是它的命名部分規則:

1. 類的命名 C+首字母大寫的單片語合,通常是名字性短語,一般不含下劃線
如CMyClass

2 函數(類成員函數) 首字母大寫的單片語合,通常是動賓結構的短語一般不含下劃線
如 GetName(), PostMessage(),SaveProfile()等
3 成員變數 m_開頭,小寫的類型標記標記+首字母大寫的單片語合,通常是名字性短語
其中,小寫的類型標記,DWORD簡寫為dw,int 記為 i, usigned int記為u或n,HANDLE記為h,Window記為wnd, 以0結尾的字元串記為sz,CString記為str
如 m_szName, m_strName,m_nAge
4. 全局變數同成員變數,只是將m_改為g_
5. 靜態變數同成員變數,只是將m_改為s_
6. 參數, 同成員變數,只是去掉m_,無前綴 如SaveProfile(NewProfile)
7. 指針,通常是與變數前叫p表示,指向指針的指針則是pp開頭

匈牙利命名法 按照MS方式編程:匈牙利符號表示法
匈牙利符號表示法包括許多與下列命名有關的約定:
(1)變數
(2)函數
(3)類型和常量
(4)類
(5)參數
匈牙利符號表示法的前綴代碼指導說明書:

**************************************************************************
前綴 數據類型(基本類型)
C 字元
BY 位元組
N 短整數和整數(表示一個數)
I 整數
X,Y 短整數(通常用於X坐標和Y坐標)
CX,CY短整數(通常用於表示X和Y的長度,C表示計數)
B 布爾型
W UINT(無符號數)和WORD(無符號字)
L LONG(長整數)
DW DWORD(無符號長整數)
FN 函數指針
S 串
SZ,STR 以0位元組終止的字元串
LP 32位長整數指針
H 編號(常用於表示Windows對象)
MSG消息
**************************************************************************
變數的命名:
應用匈牙利表示法,變數可用上表中的前綴代碼來表示。另外,當一個變數是由一個或幾個子名構成時,每一個子名都要以大寫字母開頭。下

面是幾個例子:
char *szfileName; // a nulla terminated string:以0終止的字元串
int *lpidate;// a 32-bit pointer to an int:指向一個整型變數的32位的長指針
Bool,bSemaphore; //a boolean value
WORD dwMaxCount // a 32-bit unsigned WORD
盡管我們了解一個函數的局部變數沒有說明,但是也有個別表示全局變數必須要以 g_ 開頭:
int g_iXPos;// a global x-position
int g_iTimer; // a global y-position
char *g_szString //a global NULL terminated string
函數的命名:
函數和變數的命名方式相同,但是沒有前綴,換句話說,子名的第一個字母要大寫。下面是幾個例子:
int PlotPixel(int ix,int iy,int ic);
void *MemScan(char *szString);
而且,下劃線是非法的。例如,下面的函數名表示是無效的匈牙利表示法:
int Get_Pixel(int ix,int iy);
類型和常量的命名:
所有的類型和常量都是大寫字母,但名字中可以允許有下劃線。如:
const LONG NUM_SECTORS=100; // a C++ style constant
#define MAX_CELLS 64; // a C style constant
#define POWERUNIT 100;// a C style constant
typedef unsigned char UCHAR;// a user defined type
類的命名
類命名的約定可能要麻煩一點。但我也看到有很多人在使用這個約定,並獨立地進行補充。不管怎麼說,所有C++的類必須以大寫C為前綴,類

名字的每一個子名的第一個字母都必須大寫:
class CVector// the chinese mean of vector is 矢量
{
public
CVector();
{ix=iy=iz=imagnitude=0;} //the chinese mean of magnitude is 大小
CVector(int x, int y, int z)
{ix=x;iy=y;iz=z;}
......
private:
int ix,iy,iz;//the position of the vector
int imagnitude; //the magnitude of the vector
......
}
參數的命名
函數的參數命名和標准變數命名的約定相同。但也不總是如此。如:
UCHAR GetPixel(int x,int y);
這種情況下,更准確的匈牙利的函數原型是:
UCHAR GetPixel(int ix,int iy);

『玖』 vc里參數帶lpsz是什麼意思

lpsz是聲明一個字元串變數lpszText SetItemText 是設定子項的文本

比如一個CListCtrl列表控制項,它有很多行子項,SetIemText用來設定每行的指定列顯示文本

『拾』 Visual C++ 各種字母的標識含義

匈牙利命名法,有人喜歡有人不喜歡。

匈牙利命名法是一種編程時的命名規范。基本原則是:變數名=屬性+類型+對象描述,其中每一對象的名稱都要求有明確含義,可以取對象名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。
舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,則當表單變數名稱為Switchboard時,變數全稱應該為 frmSwitchboard。這樣可以很容易從變數名看出Switchboard是一個表單,同樣,如果此變數類型為標簽,那麼就應命名成 lblSwitchboard。可以看出,匈牙利命名法非常便於記憶,而且使變數名非常清晰易懂,這樣,增強了代碼的可讀性,方便各程序員之間相互交流代碼。
據說這種命名法是一位叫 Charles Simonyi 的匈牙利程序員發明的,後來他在微軟呆了幾年,於是這種命名法就通過微軟的各種產品和文檔資料向世界傳播開了。現在,大部分程序員不管自己使用什麼軟體進行開發,或多或少都使用了這種命名法。這種命名法的出發點是把變數名按:屬性+類型+對象描述的順序組合起來,以使程序員作變數時對變數的類型和其它屬性有直觀的了解,下面是HN變數命名規范,其中也有一些是我個人的偏向:
屬性部分
全局變數
g_
常量
c_
c++類成員變數
m_
靜態變數
s_
類型部分
指針
p
函數
fn
無效
v
句柄
h
長整型
l
布爾
b
浮點型(有時也指文件)
f
雙字
dw
字元串
sz
短整型
n
雙精度浮點
d
計數
c(通常用cnt)
字元
ch(通常用c)
整型
i(通常用n)
位元組
by

w
實型
r
無符號
u
描述部分
最大
Max
最小
Min
初始化
Init
臨時變數
T(或Temp)
源對象
Src
目的對象
Dest
這里順便寫幾個例子:
hwnd : h 是類型描述,表示句柄, wnd 是變數對象描述,表示窗口,所以 hwnd 表示窗口句柄;
pfnEatApple : pfn 是類型描述,表示指向函數的指針, EatApple 是變數對象描述,所以它表示
指向 EatApple 函數的函數指針變數。
g_cch : g_ 是屬性描述,表示全局變數,c 和 ch 分別是計數類型和字元類型,一起表示變數類
型,這里忽略了對象描述,所以它表示一個對字元進行計數的全局變數。
上面就是HN命名法的一般規則。
小結:匈牙利命名法
匈牙利命名法
MFC、句柄、控制項及結構的命名規范 Windows類型 樣本變數 MFC類 樣本變數
HWND hWnd; CWnd* pWnd;
HDLG hDlg; CDialog* pDlg;
HDC hDC; CDC* pDC;
HGDIOBJ hGdiObj; CGdiObject* pGdiObj;
HPEN hPen; CPen* pPen;
HBRUSH hBrush; CBrush* pBrush;
HFONT hFont; CFont* pFont;
HBITMAP hBitmap; CBitmap* pBitmap;
HPALETTE hPaltte; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn;
HMENU hMenu; CMenu* pMenu;
HWND hCtl; CState* pState;
HWND hCtl; CButton* pButton;
HWND hCtl; CEdit* pEdit;
HWND hCtl; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;
HWND hCtl; CScrollBar* pScrollBar;
HSZ hszStr; CString pStr;
POINT pt; CPoint pt;
SIZE size; CSize size;
RECT rect; CRect rect;
一般前綴命名規范 前綴 類型 實例
C 類或結構 CDocument,CPrintInfo
m_ 成員變數 m_pDoc,m_nCustomers
變數命名規范 前綴 類型 描述 實例
ch char 8位字元 chGrade
ch TCHAR 如果_UNICODE定義,則為16位字元 chName
b BOOL 布爾值 bEnable
n int 整型(其大小依賴於操作系統) nLength
n UINT 無符號值(其大小依賴於操作系統) nHeight
w WORD 16位無符號值 wPos
l LONG 32位有符號整型 lOffset
dw DWORD 32位無符號整型 dwRange
p * 指針 pDoc
lp FAR* 遠指針 lpszName
lpsz LPSTR 32位字元串指針 lpszName
lpsz LPCSTR 32位常量字元串指針 lpszName
lpsz LPCTSTR 如果_UNICODE定義,則為32位常量字元串指針 lpszName
h handle Windows對象句柄 hWnd
lpfn callback 指向CALLBACK函數的遠指針
前綴 符號類型 實例 范圍
IDR_ 不同類型的多個資源共享標識 IDR_MAIINFRAME 1~0x6FFF
IDD_ 對話框資源 IDD_SPELL_CHECK 1~0x6FFF
HIDD_ 對話框資源的Help上下文 HIDD_SPELL_CHECK 0x20001~0x26FF
IDB_ 點陣圖資源 IDB_COMPANY_LOGO 1~0x6FFF
IDC_ 游標資源 IDC_PENCIL 1~0x6FFF
IDI_ 圖標資源 IDI_NOTEPAD 1~0x6FFF
ID_ 來自菜單項或工具欄的命令 ID_TOOLS_SPELLING 0x8000~0xDFFF
HID_ 命令Help上下文 HID_TOOLS_SPELLING 0x18000~0x1DFFF
IDP_ 消息框提示 IDP_INVALID_PARTNO 8~0xDEEF
HIDP_ 消息框Help上下文 HIDP_INVALID_PARTNO 0x30008~0x3DEFF
IDS_ 串資源 IDS_COPYRIGHT 1~0x7EEF
IDC_ 對話框內的控制項 IDC_RECALC 8~0xDEEF
Microsoft MFC宏命名規范 名稱 類型
_AFXDLL 唯一的動態連接庫(Dynamic Link Library,DLL)版本
_ALPHA 僅編譯DEC Alpha處理器
_DEBUG 包括診斷的調試版本
_MBCS 編譯多位元組字元集
_UNICODE 在一個應用程序中打開Unicode
AFXAPI MFC提供的函數
CALLBACK 通過指針回調的函數
庫標識符命名法 標識符 值和含義
u ANSI(N)或Unicode(U)
d 調試或發行:D = 調試;忽略標識符為發行。
靜態庫版本命名規范 庫 描述
NAFXCWD.LIB 調試版本:MFC靜態連接庫
NAFXCW.LIB 發行版本:MFC靜態連接庫
UAFXCWD.LIB 調試版本:具有Unicode支持的MFC靜態連接庫
UAFXCW.LIB 發行版本:具有Unicode支持的MFC靜態連接庫
動態連接庫命名規范 名稱 類型
_AFXDLL 唯一的動態連接庫(DLL)版本
WINAPI Windows所提供的函數
Windows.h中新的命名規范 類型 定義描述
WINAPI 使用在API聲明中的FAR PASCAL位置,如果正在編寫一個具有導出API人口點的DLL,則可以在自己的API中使用該類型
CALLBACK 使用在應用程序回叫常式,如窗口和對話框過程中的FAR PASCAL的位置
LPCSTR 與LPSTR相同,只是LPCSTR用於只讀串指針,其定義類似(const char FAR*)
UINT 可移植的無符號整型類型,其大小由主機環境決定(對於Windows NT和Windows 9x為32位);它是unsigned int的同義詞
LRESULT 窗口程序返回值的類型
LPARAM 聲明lParam所使用的類型,lParam是窗口程序的第四個參數
WPARAM 聲明wParam所使用的類型,wParam是窗口程序的第三個參數
LPVOID 一般指針類型,與(void *)相同,可以用來代替LPSTR
--------------------------------------------------------------------------------
抨擊匈牙利命名法
匈牙利命名法是一種編程時的命名規范。命名規范是程序書寫規范中最重要也是最富爭議的地方,自古乃兵家必爭之地。命名規范有何用?四個字:名正言順。用二分法,命名規范分為好的命名規范和壞的命名規范,也就是說名正言順的命名規范和名不正言不順的命名規范。好的舞鞋是讓舞者感覺不到其存在的舞鞋,壞的舞鞋是讓舞者帶著鐐銬起舞。一個壞的命名規范具有的破壞力比一個好的命名規范具有的創造力要大得多。
本文要證明的是:匈牙利命名法是一個壞的命名規范。本文的作用范圍為靜態強類型編程語言。本文的分析範本為C語言和C++語言。下文中的匈法為匈牙利命名法的簡稱。
一 匈牙利命名法的成本
匈法的表現形式為給變數名附加上類型名前綴,例如:nFoo,szFoo,pFoo,cpFoo分別表示整型變數,字元串型變數,指針型變數和常指針型變數。可以看出,匈法將變數的類型信息從單一地點(聲明變數處)復制到了多個地點(使用變數處),這是冗餘法。冗餘法的成本之一是要維護副本的一致性。這個成本在編寫和維護代碼的過程中需要改變變數的類型時付出。冗餘法的成本之二是佔用了額外的空間。一個優秀的書寫者會自覺地遵從一個法則:代碼最小組織單位的長度以30個自然行以下為宜,如果超過50行就應該重新組織。一個變數的書寫空間會給這一法則添加不必要的難度。
二 匈牙利命名法的收益
這里要證明匈牙利命名法的收益是含糊的,無法預期的。
範本1:strcpy(pstrFoo,pcstrFoo2) Vs strcpy(foo,foo2)
匈法在這里有什麼收益呢?我看不到。沒有一個程序員會承認自己不知道strcpy函數的參數類型吧。
範本2:unknown_function(nFoo) Vs unknown_function(foo)
匈法在這里有什麼收益呢?我看不到。對於一個不知道確定類型的函數,程序員應該去查看該函數的文檔,這是一種成本。使用匈法的唯一好處是看代碼的人知道這個函數要求一個整型參數,這又有什麼用處呢?函數是一種介面,參數的類型僅僅是介面中的一小部分。諸如函數的功能、出口信息、線程安全性、異常安全性、參數合法性等重要信息還是必須查閱文檔。
範本3:nFoo=nBar Vs foo=bar
匈法在這里有什麼收益呢?我看不到。使用匈法的唯一好處是看代碼的人知道這里發生了一個整型變數的復制動作,聽起來沒什麼問題,可以安心睡大覺了。如果他看到的是nFoo=szBar,可能會從美夢中驚醒。且慢,事情真的會是這樣嗎?我想首先被驚醒的應該是編譯器。另一方面,nFoo=nBar只是在語法上合法而已,看代碼的人真正關心的是語義的合法性,匈法對此毫無幫助。另一方面,一個優秀的書寫者會自覺地遵從一個法則:代碼最小組織單位中的臨時變數以一兩個為宜,如果超過三個就應該重新組織。結合前述第一個法則,可以得出這樣的結論:易於理解的代碼本身就應該是易於理解的,這是代碼的內建高質量。好的命名規范對內建高質量的助益相當有限,而壞的命名規范對內建高質量的損害比人們想像的要大。
三 匈牙利命名法的實施
這里要證明匈牙利命名法在C語言是難以實施的,在C++語言中是無法實施的。從邏輯上講,對匈法的收益做出否定的結論以後,再來論證匈法的可行性,是畫蛇添足。不過有鑒於小馬哥曾讓已射殺之敵死灰復燃,我還是再踏上一支腳為妙。
前面講過,匈法是類型系統的冗餘,所以實施匈法的關鍵是我們是否能夠精確地對類型系統進行復制。這取決於類型系統的復雜性。
先來看看C語言:
1.內置類型:int,char,float,double 復制為 n,ch,f,d?好像沒有什麼問題。不過誰來告訴我void應該怎麼表示?
2.組合類型:array,union,enum,struct 復制為 a,u,e,s?好像比較別扭。
這里的難點不是為主類型取名,而是為副類型取名。an表示整型數組?sfoo,sbar表示結構foo,結構bar?ausfoo表示聯合結構foo數組?累不累啊。
3.特殊類型:pointer。pointer在理論上應該是組合類型,但是在C語言中可以認為是內置類型,因為C語言並沒有非常嚴格地區分不同的指針類型。下面開始表演:pausfoo表示聯合結構foo數組指針?ppp表示指針的指針的指針?
噩夢還沒有結束,再來看看類型系統更阿為豐富的C++語言:
1.class:如果說C語言中的struct還可以用stru搪塞過去的話,不要夢想用cls來搪塞C++中的class。嚴格地講,class根本就並不是一個類型,而是創造類型的工具,在C++中,語言內置類型的數量和class創造的用戶自定義類型的數量相比完全可以忽略不計。stdvectorFoo表示標准庫向量類型變數Foo?瘋狂的念頭。
2.命名空間:boostfilesystemiteratorFoo,表示boost空間filesystem子空間遍歷目錄類型變數Foo?程序員要崩潰了。
3.模板:你記得std::map<std::string,std::string>類型的確切名字嗎?我是記不得了,好像超過255個字元,還是饒了我吧。
4.模板參數:template <class T, class BinaryPredicate>const T& max(const T& a, const T& b, BinaryPredicate comp) 聰明的你,請用匈法為T命名。上帝在發笑。
5.類型修飾:static,extern,mutable,register,volatile,const,short,long,unsigned 噩夢加上修飾是什麼?還是噩夢。

WM就是Windows Message,Windows消息。