將長度為len的key對應的字串value從src中截取出來
#include <stdio.h> #define U8 unsigned char #define U16 unsigned short /* 功能:將長度為len的key對應的字串value從src中截取出來 MaxSize value前面字元的最大個數,包括= src 原字串,key=value,例如從檔案中讀取過來的資料 key 屬性名稱 len key的長度 value 儲存得到的結果 1. 排除key前面的字元,從key開始算起,例如" abckey=value" 2. MaxSize是value前面字元的最大個數,包括= 3. value沒有空格 */ U8 GetStr(U16 MaxSize,char* src ,char* key ,U8 len, char* value) { U16 i,j; U8 getFlag; U16 getAddr; char tempStr[200]; for(i=0;i<MaxSize-len;i++) { getFlag=1; for(j=0;j<len;j++) { if(src[i+j]!=key[j]) { getFlag=0; break; } } if(getFlag==1) { getAddr=i; break; } } if(getFlag==1) { sprintf(tempStr,"%s=%%s",key);// key=%s sscanf(src+getAddr,tempStr,value); } return(getFlag); } int main() { char *src=" 1 2 abcd=12345 123"; char *key="abcd"; char val[200]; if(GetStr(10, src, "abcd", 4, val)==1) { printf("得到%s值為:%s\n", key, val); } return 0; }
另外編譯器原因,VS2010編譯C程式時,要求變數宣告在執行語句的前面,否者會報
error C2143: 語法錯誤 : 缺少“;”(在“型別”的前面)
error C2065: “tempStr”: 未宣告的識別符號
編譯器對變數宣告的規定
C89在塊(花括號)的開頭宣告所有區域性變數,不是非要在函式開頭。
C99以及C++中區域性變數則沒有這個限制,可在任何位置宣告變數,只需放在使用之前的位置
據說,微軟主要的方向是對C++的編譯器提供新特性的支援(對C++11做了許多支援),而不是C編譯器。
用7-Zip開啟VS目錄下的cl.exe,有一個version.txt開啟內容如下:
FILEVERSION 16,0,30319,1
PRODUCTVERSION 10,0,30319,1
FILEFLAGSMASK 0x3F
FILEFLAGS 0x0
FILEOS VOS_UNKNOWN | VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE 0x0
{
BLOCK "StringFileInfo"
{
BLOCK "040904B0"
{
VALUE "CompanyName", "Microsoft Corporation"
VALUE "FileDescription", "Microsoft® C/C++ Compiler Driver"
VALUE "FileVersion", "16.00.30319.01 built by: RTMRel"
VALUE "InternalName", "CL.EXE"
VALUE "LegalCopyright", "© Microsoft Corporation. All rights reserved."
VALUE "OriginalFilename", "CL.EXE"
VALUE "ProductName", "Microsoft® Visual Studio® 2010"
VALUE "ProductVersion", "10.00.30319.01"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1200
}
}
這就是微軟的封閉編譯器吧。