1. 程式人生 > >將長度為len的key對應的字串value從src中截取出來

將長度為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
  }
}


這就是微軟的封閉編譯器吧。