2015年6月28日 星期日

[C語言]C char處理

1.char的指標回傳應用
static char* get_id()//宣告靜態函式 回傳值會回存到一個char pointer中
{
    return value;
}
//=============================================================
bool is_range()
{
    char* id = get_id();
    int id_length;
    id_length = strlen(id);
    if (condition)
    {
         條件處理一
         return true;
    }else
    {
        return false;
    }
}
2.char point計算大小
論證一 char point不能用sizeof來計算大小

關於這個問題首先討論取得id的長度
一般我們會習慣使用sizeof 函式來算我們的長度
一定會想要用size=sizeof(x)/sizeof(x[0]); //x[0]為x陣列中的第一個值(因為永遠存在,所以拿它來當除數)
正常來說他是管用的
但今天我們遇到的是char*  所以他會回傳char*的size  =  4
主要是因為他會算id這個char pointer在記憶體所佔的大小(注意 是指標大小 而非id這容器大小)


3.char point長度內取值
論證二 使用strlen 會得到內容值+1的長度大小
假設id的內容為 123456789  九個內容值
理論上strlen應該為9但結果是10
因為123456789\0   會幫你多加一個結尾 所以結果是10

我們取得id的值 則
condition與條件處理可以設為
char abc;
if(id_length >= n)
{
    abc{0}= id[n-1];//即id倒數最後一個值(非\0)assign到abc的第0個位址
}

4.動態char比對函式探討 (嵌入式系統適用)
目前已知比對函式有
a.strstr

strstr 有找到 stakeoverflow - Get index of substring
char *str = "sdfadabcGGGGGGGGG";
char *result = strstr(str, "abc");
int position = result - str;
int substringLength = strlen(str) - position;
b.strcmp
c.strchr

在拜讀 strchr(3) - Linux man page
文中提到 :
The strchr() function returns a pointer to the first occurrence of the character c in the string s.
The strrchr() function returns a pointer to the last occurrence of the character c in the string s.
The strchrnul() function is like strchr() except that if c is not found in s, then it returns a pointer to the null byte at the end ofs, rather than NULL.


5.char轉換成int
int atoi ( const char * str ); 

//example 
char *input = "123"; 
int n = atoi(input);









沒有留言:

張貼留言