LINUX的妙用

1、零長度的數組妙用:

定義時,如:

 struct var_data{

int len;

char data[0];

};

char data[0]僅僅意味着程序中通過var_data結構體實例的data[index]成員可以訪問len之後的第index個地址,它並沒有爲data[]數組分配 內存,因此sizeof(struct var_data) = sizeof(int).

如:

int i;
struct var_data *pvar_buffer = (char*)malloc(sizeof(struct var_data)+sizeof(char)*10);
if (pvar_buffer == NULL)
return -1;

for (i=0; i<10; i++)
pvar_buffer->data[i] = i;

for (i=0; i<10; i++)
printf("pvar_buffer->data[%d]=%d\r\n", i, pvar_buffer->data[i]);

if (pvar_buffer != NULL)
free(pvar_buffer);

用途 :長度爲0的數組的主要用途是爲了滿足需要變長度 的結構體

應用二:

      當不知道傳來的buffer有多少時,可以應用零長度的結構體,如:

static void  send_commd(char *buff, unsigned int len)

{

struct var_data *p = (char*)malloc(sizeof(struct var_data)+sizeof(char)*len);

p->len = len;

       memcpy(p->data, buff, len);

send(p->data, p->len);

free(p);

}


2、case範圍

GNU C支持case x...y這樣的語法,區間【x,y】的數都會滿足這個case和條件,如:

int main(void)
{
char ch = '8';

switch (ch)
{
case '0'...'9':
printf("'0'~'9'\n");
break;

case 'a'...'z':
printf("a~z\n");
break;

case 'A'...'Z':
printf("A~Z\n");
break;

default:
printf("defaut\n");
break;
}
return 0;
}

注:當爲數字時,先轉成ASSCAL碼,處理後,再轉回數字


發佈了41 篇原創文章 · 獲贊 36 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章