Re: [問題] char* 的問題

看板C_and_CPP作者 (藍影)時間14年前 (2011/09/08 13:05), 編輯推噓8(806)
留言14則, 10人參與, 最新討論串2/2 (看更多)
※ 引述《gundan (鋼彈)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : vc++ : 問題(Question): : char*傳入function的問題 : 餵入的資料(Input): : char* : 程式碼(Code):(請善用置底文網頁, 記得排版) : char* func(char* buffer) : { : printf( "%x" , buffer); ←問題在這行 : char result[40]; : return result; : } : 補充說明(Supplement): : 程式裡只要用到buffer就會出現語法錯誤 : 錯誤在下面那行 錯誤訊息就是在type前必須有 " ; " : 請問一下這是什麼問題??? : 謝謝 其實 vc 裡面, 用 .c 有蠻多要注意的, 原因嗎? 大概是 vc 用 .c 是用 c 語言 compiler, 非 c++ compiler, 也不支援 c99, 補一下我常遇到的, 有些可能有專有名詞, 但我沒記那些專有名詞( 歡迎補充 ) 1. 變數必須一次宣告完 就如你程式裡面的 result 一樣,在 result 前不能做任何指令之動作, 即使是放在 for loop 做初值宣告也不行 /* .cpp pass, .c fail */ for(int i=0; i!=5; ++i) puts("hello, world!!"); 不過可以進行宣告, 並以呼叫函式方式給予初值 /* .cpp pass, .c pass */ int x=func1(); int *iptr = (int*)malloc(sizeof(int)*10); int others; 甚至原本程式碼可以有一點小技巧可以避開 /* .cpp pass, .c pass */ char *func(char *buf) { printf("%x",buf); { char* ret = (char*)malloc(sizeof(char)*10); return ret; } } 這技巧早期程設師也會拿來做 register 規劃 ,因 register 有限,不能用太多. 但是有一說,現今部份 compiler 在 release mode 時, 會把 register 全拿掉, 這部份優化由 compiler 自己做, 會保留 register 關鍵字只是為相容而已。 2. 強制轉型部份 以上述 malloc 為例, char *ret = malloc(sizeof(char) * 10); 這在 .c 是可行的, 但在 .cpp 是不可行的 3. 結構宣告與使用部份 struct s{ int x; int y; }; 宣告上時, .c 必須連關鍵字 struct 一起輸入, .cpp 卻不用 /* .cpp pass, .c fail */ s obj; 到後來我都這麼搞 typedef struct tag_s{ int x; int y; }s; /* .cpp pass, .c pass */ s obj; 4. 設立函式引數初值部份 /* .cpp pass, .c fail */ void func(int x=10) { int i; for(i=0; i!=x; ++i) puts("hello, world!!"); } 在 .c 裡面不允許你那麼做, 但在 .cpp 裡面可以。 5. 注意數學函式之多載問題 數學函式使用上必須注意在 .c / .cpp 多載問題 , /* .cpp fail, .c pass */ double x = pow(2, 3); 部份函式, 該用浮點數就別省 /* .cpp pass, .c pass */ double x= pow(2.0, 3.0); /* 當然不會是這個例子 */ --- 以上一點經驗, 常見的那些, 有些可能還舉出, 供參考, 也歡迎補充。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.78.41 ※ 編輯: tropical72 來自: 180.177.78.41 (09/08 13:07)

09/08 13:08, , 1F
好人推!
09/08 13:08, 1F

09/08 13:08, , 2F
話說,pow那邊我在cpp內用整數也可以耶,不用刻意用
09/08 13:08, 2F

09/08 13:09, , 3F
浮點數
09/08 13:09, 3F

09/08 13:11, , 4F
應是有什麼誤會,error C2668: 'pow' : 模稜兩可的呼叫~
09/08 13:11, 4F

09/08 13:12, , 5F
用 .cpp, 專案清掉重 build, 錯誤可能就浮出來了.
09/08 13:12, 5F

09/08 13:21, , 6F
推好人!
09/08 13:21, 6F

09/08 13:45, , 7F
~"~超哥真的是...
09/08 13:45, 7F

09/08 15:00, , 8F
超清楚,感恩!
09/08 15:00, 8F


09/08 15:14, , 10F
littleshan 提供的真是好物... vc .c 不完全是便是 XD
09/08 15:14, 10F

09/08 17:34, , 11F
09/08 17:34, 11F

09/08 23:04, , 12F
推:)
09/08 23:04, 12F

09/09 01:02, , 13F
用心推!
09/09 01:02, 13F

09/09 17:53, , 14F
push
09/09 17:53, 14F
文章代碼(AID): #1EQ4q7wp (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EQ4q7wp (C_and_CPP)