2014-02-18 63 views
2

我想要做的是有string256行爲,如:char* s = (char*)malloc(256);可以使用malloc進行typedef或定義char指針嗎?

string256 s; /* this is what Iam trying to do */ 


char* s = (char*) malloc(256); /* this is how it looks in real life */ 

,並用它

strncpy(s, "__test__", 9) 

s[9] = 0x00; 

附: typedef或定義或功能代碼長度無關緊要。只有重要string256 s; 我不會忘記使用免費或錯誤檢查;

完整的代碼如下所示:

__Free_String_if_Flag_true __Zero_Memory __check_for_Errors __string_256 string256 

,並用它

string256 s; 
+0

不要這樣做!如果你能設法弄清楚如何這樣做,你必須記得釋放所有'string256'。這只是一個維護噩夢! – John3136

+0

爲什麼要隱藏malloc()調用?該字符串將如何釋放?你會寫'免費'嗎?還是你想讓這個電話被隱藏? –

+1

無視所有這些(明智的恕我直言)建議,你可以做你正在問#defines(見下文)。你的下一個問題應該追求,_Why是不是一個好主意?_ – ryyker

回答

2

總之,沒有。

typedef定義了一個類型的名稱。 char* s = (char*) malloc(256);是一個變量聲明,而不是一個類型。

你也許可以實現與宏類似的東西,但我會強烈建議不要它(一開始,它會掩蓋一個事實,即free會在某些時候是必要的。)

+0

這不是一個聲明;它是一個帶有初始化程序的聲明。 – wildplasser

+0

@wildplasser:的確是這樣;) –

+0

你好... – wildplasser

2

你可以讓一個typedef字符數組的:

typedef char char256[256]; 

char256 s ; 
s[255] = '\0' ; 

變量將停止現有超出範圍時,但你可以把它的全球如果你想讓它持續。

+0

+1這是我想要做的 – flexe

0

至於你的問題的詢問的一部分......或定義...
總之 - 是的,你可以:(部分採取例外與一些其他意見/答案)
但是,我也同意這些答案,表明它可能不是最好的形式使用#defines這種調用。 (但你可以做到這一點)

編輯(去掉 「;」 從宏觀)

#define string256(s) char *(s) = malloc(256) 
//... 
string256(s); //use parenethesis 
/... 
strcpy(s, "yes I can");  

小號現在包含 「是的,我能」 爲空終止(strcpy()是否這樣做)

不要忘了也爲01創建一個宏

+0

+1這是好的,但仍然不是我想p.s.you忘記\ string256(s)之後:) – flexe

+1

不要在宏定義中放置分號;定義一個免費將是多餘的。 – this

+0

所以char * s;和string256(s);它與char * s =(char *)malloc(256)相同; – flexe