PIXNET Logo登入

心的距離

跳到主文

Google
Custom Search

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 10月 24 週四 201315:19
  • memcpy/strncpy/snprintf

話說字串處理在C語言是很常用的,在使用時要注意的地方很多。一般在複製字串不外以下幾個function:
memcpy/strncpy/snprintf
各有其使用時機。strncpy看起來多一個n來指定複製長度,以避免overflow,乍看之下是很安全的,但結束符號常常是一個問題,導致結果和預期的不符。請見以下範例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(1) 人氣(3,016)

  • 個人分類:C programming
▲top
  • 9月 05 週四 201315:32
  • c語言的macro技巧

c的macro真是博大精深,真要自己搞一些特異功能的macro腦子就不夠使了,但,至少要會抄!
C語言巨集定義技巧
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(15,543)

  • 個人分類:C programming
▲top
  • 3月 28 週一 201113:27
  • unix domain socket

domain_sock_flow
這次有兩個主題:
1. unix domain socket IPC
2. 傳structure
先看流程圖
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(20,814)

  • 個人分類:C programming
▲top
  • 3月 25 週五 201114:20
  • Process byte order -- Big-endian or Little-endian

事情發生在不同的processor對於 byte order會有相反的狀況,因此有了所謂的Big-endian和Little-endian。
對一個32-bit 整數0x12345678來說
1. Little-endian如intel的processor,在記憶體的順序為
    address               value
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(2,080)

  • 個人分類:C programming
▲top
  • 11月 01 週一 201013:05
  • const modifier

const的位置決定修飾的對像,如 char const *p表示修飾的是*p,所以不能用*p='a',而p這個address是可以修改的,比如p=&q。
如果是char* const p,則表示修飾的是p這個address。所以可以用*p='a',而不能p=&q。這兩個是相反的例子。
再來是都不能修改的狀況,const char* const p,則*p跟p都不能再賦值了。
最後const是左修飾,所以 const char跟 char const是一樣的意思。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(1,129)

  • 個人分類:C programming
▲top
  • 10月 27 週三 201010:38
  • scope

variable的modifier定義其特性,這次討論static與extern:
static variable: 其值是會保留在記憶體的,不隨著離開其scope而消失 (只initialize一次)。
extern variable: 該變數已在其他地方(包括其他file)被定義過了,存取的方式是先宣告為extern,再來存取。
看例子:
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(577)

  • 個人分類:C programming
▲top
  • 10月 26 週二 201016:31
  • unsigned vs signed

已知
  1. int 4 bytes = 32 bits, char 1 byte = 8bits
  2. 負數以2's complement 儲存
  3. %d是signed integer %u是unsigned integer。做型別轉換時,需要做sign extention,方式為不足的bit補其符號(即正補0,負補1)。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(0) 人氣(2,779)

  • 個人分類:C programming
▲top
  • 8月 24 週二 201015:12
  • 腦細胞殺手--指位器 (pointer)

ptr
現有一段程式如下:
#include <iostream>
using namespace std;
int main() {
int p = 10;
int *ptr1 = &p;
int **ptr2 = &ptr1;
cout << "p的值:" << p << endl;
cout << "p的記憶體位置: " << &p << endl;
cout << endl;
cout << "*ptr1 = " << *ptr1 << endl;
cout << "ptr1 = " << ptr1 << endl;
cout << "ptr1的記憶體位置: " << &ptr1 << endl;
cout << endl;
cout << "**ptr2 = " << **ptr2 << endl;
cout << "*ptr2 = " << *ptr2 << endl;
cout << "ptr2 = " << ptr2 << endl;
cout << "&ptr2 = " << &ptr2 << endl;
cout << endl;
return 0;
}
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(2) 人氣(1,726)

  • 個人分類:C programming
▲top
  • 10月 13 週二 200908:39
  • do ... while(0) for 多語句的macro

玩linux多多少少會看到一個用法 do xxx while(0)。從邏輯上來看,似乎沒什麼特別的,甚至會懷疑是否多此一舉 (while 0不就是直接跳出嗎?)。事實上,這是有一定用途的,主要是避免文法錯誤。在define macro時,只有一個語句,如#define foo(x) bar(x); 這樣多半不會有問題。但較複雜的macro搭配if else等flow control時,就會產生文法上的問題,看下例:
#define foo(x) bar(x); qoo(x);
int main(int argc, char* argv[])
{
        if(1)
                foo(1);
        else
                printf("in else\n");
}
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(2) 人氣(18,889)

  • 個人分類:C programming
▲top
  • 8月 18 週二 200914:35
  • Data structure的對齊(alignment)

變數的宣告,會配置其所需的記憶體。每種變數所需的大小不一樣,比如說char是1 bytes,int 是4 bytes,double則是8
bytes。如果是這樣,那這些大小在記憶體中是如何擺放呢?是直覺的一個接一個放嗎?其實不然。這牽扯到performance /
efficiency的問題! 在32 bits的架構上,一次的資料存取也就是32 bits (4 bytes)。而這4 bytes
不是隨便從哪個點抓都可以,而是以4 bytes為單位,不管需要的是其中那個byte,就抓那4個bytes。比如說,抓第0,4,8
,12....等,而不會是從3,7,9開始抓4個bytes。
(繼續閱讀...)
文章標籤

kezeodsnx 發表在 痞客邦 留言(4) 人氣(44,055)

  • 個人分類:C programming
▲top
12»

文章搜尋

廣告版面

廣告版面

參觀人氣

  • 本日人氣:
  • 累積人氣:

文章分類

toggle 生活 (4)
  • 高登鐵漢 (7)
  • 英文筆記 (0)
  • 愚蠢上班族 (12)
  • 無病呻吟 (9)
toggle Linux (7)
  • kernel (2)
  • System (45)
  • Shell (8)
  • android (12)
  • C programming (15)
  • Multimedia (10)
  • Driver (27)
  • server (2)
  • wireless (7)
  • 有的沒的 (3)
  • 未分類文章 (1)

google analytics