Re: [問題] 從字串中的第5個位元開始抓字串

作者: jacky1989   2016-09-12 22:43:00
※ 引述《hardware (哈味)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Linux GCC
: 問題(Question):
: #include <unistd.h>
: #include <stdio.h>
: #include <stdlib.h>
: #include <time.h>
: int main(int argc, char **argv)
: {
: char *line = "abc dddd efg hhhhhhhhhh";
: /* 從第五個位元開始抓6個位元
: 也就是抓出來的結果想要是
: "dddd e"
: 目前找C的字串處理函式找不太到
: 不知道怎麼抓出來 感謝大大的指導
: */
: return 0;
: }
如果沒有處理函式,那就自己寫
我學長說,不能奢望每次都有標準函式庫或是別人寫好的可以用
char self_str[7];
int i;
for(i=0;i<6;i++)
self_str[i]=*(line+4+i);
self_str[i]='\0'; //這行一定要記得加,很多人會忘記
作者: Caesar08 (Caesar)   2016-09-12 22:59:00
原文的回文就有解答了... 你真的有看原文的回文嗎?strncpy...就include就好了,strncpy也是standard c function
作者: EdisonX (卡卡獸)   2016-09-12 23:31:00
1. 情非得已情況下永遠不要自己造輪子。 2. 自己寫的比較慢,沒經過驗證。 3. pow (double * , double *) 是 ???math.h 的確沒有 pow(double * , double *) 啊 @@話說回來,如果今天工作看到有人自己寫 strcpy,我想有厭惡
作者: Caesar08 (Caesar)   2016-09-12 23:34:00
是阿 不是好現象,那你就都全部自己刻吧
作者: EdisonX (卡卡獸)   2016-09-12 23:34:00
感的應該不只有我一人 @@ 原因就如上所述。
作者: Caesar08 (Caesar)   2016-09-12 23:37:00
你只需要一個strncpy,就只好自己寫一個strncpy下次你只需要一個qsort,就只好自己做quick sort
作者: EdisonX (卡卡獸)   2016-09-12 23:39:00
@Caesar08,下次需要 cv::imread / cv::imwrite的時候..@@
作者: Caesar08 (Caesar)   2016-09-12 23:41:00
另外,standard library可以預先編譯好,其實沒有編譯的檔案數是多很多的 這種問題,如果是C++你才有可能要擔心
作者: Sirctal (母豬母豬 夜裡哭哭)   2016-09-13 00:00:00
學長上過班沒?? 如果當自己練習當然是很好 但是出去後你如果自己硬幹 你可能會被人家婊死抱歉沒看好QQ
作者: askacis (ASKA)   2016-09-13 00:07:00
自己刻func的例子通常是寫MCU或是bootcode
作者: Caesar08 (Caesar)   2016-09-13 00:07:00
要不就是你GCC太舊,不然就是你不會用pow
作者: EdisonX (卡卡獸)   2016-09-13 00:10:00
未看先猜 : gcc -o math math.c -lm 恭喜你白刻了。 XD
作者: askacis (ASKA)   2016-09-13 00:13:00
就連uclibc都有pow()了,你公司gcc是甚麼版本? 自己編的?
作者: EdisonX (卡卡獸)   2016-09-13 00:14:00
疑!你的工作用不到C,那怎還會有這問題呢??
作者: askacis (ASKA)   2016-09-13 00:15:00
另外錯誤訊息貼上來,才知道是compile time還是linkingtime報錯,linking time 的話加個-lm 說不定就搞定了wwww
作者: Bencrie   2016-09-13 00:36:00
天啊 ... 拿 Turbo C 來比。大大你 printf 都從 int 21h 開始寫嗎
作者: chuegou (chuegou)   2016-09-13 00:45:00
我也是自己刻那一派
作者: CoNsTaR ((const *))   2016-09-13 03:50:00
朝聖…
作者: noodleT (麵T)   2016-09-13 06:53:00
除非是要自己做演算法練習,不然直接套用現成的是會比較好
作者: fatrabitree (胖兔子)   2016-09-13 08:56:00
自己寫的通常沒有函式庫快
作者: descent (「雄辯是銀,沉默是金」)   2016-09-13 09:43:00
我覺得你的想法很好, 不過紅黑樹也自己寫嗎?完成一個程式並不一定都要從輪子打造。學習的話, 從輪子打造是很棒的學習方式, 縱使打造的是破輪子math.h N1750 在 7.12.7.4 有描述 pow(), gcc 沒支援真的是很奇怪, 你的平台很特殊嗎?
作者: CoNsTaR ((const *))   2016-09-13 11:25:00
undefined reference... 你編譯有加 -lm 嗎
作者: Caesar08 (Caesar)   2016-09-13 11:57:00
怪了,1/6.0的結果也是double才對
作者: descent (「雄辯是銀,沉默是金」)   2016-09-13 12:42:00
可以 附上你的測試程式和編譯指令嗎?
作者: shadow0326 (非議)   2016-09-13 12:45:00
手邊沒有gcc4.1.2,不過有3.4.6,編起來十分正常
作者: PkmX (阿貓)   2016-09-13 13:00:00
gcc 4.1.2 都快要一個世紀以前了...
作者: askacis (ASKA)   2016-09-13 14:13:00
undefined reference to 是linking time的問題代表你連compile time跟linking time都不甚清楚加個-lm 試試看,還有問題再上來說沒有support除非是自己編的gcc,不然pow()在gcc都會有才對
作者: steve1012 (steve)   2016-09-13 15:14:00
自己造輪子是十分危險的 尤其在production code他這個例子不是太難的函數 複雜點的會有很多edge cases用library 的原因是因為它們已經被大量測試過 bug幾乎沒有自己刻學當然很好 但是不是自己用的就科科 有std map你偏要自己刻一個RB tree嗎 不論速度 安全性 維護上都是問題
作者: Caesar08 (Caesar)   2016-09-13 15:19:00
速度通常會比較慢,因為compiler通常都有一些"特別"的function可以呼叫
作者: CoNsTaR ((const *))   2016-09-13 15:42:00
每個人自己刻的版本行為都一點點不一樣 你的 strncpy 包含 '\0' 我的不包含 以後看到 strncpy 我都不知道到底是哪一種 連一個簡單的 strncpy 都可以有一堆問題 更複雜的你要怎麼辦
作者: oscar60111 (還得努力學習)   2016-09-13 16:24:00
怎麼這篇有種看到某king的感覺...
作者: EdisonX (卡卡獸)   2016-09-13 16:26:00
推樓上,曾接過wchar和char互換的,個人刻的就好幾個,還有四捨五入的也二,三個,這個到時肯定查死。
作者: Bencrie   2016-09-13 17:15:00
某 king 是說隔壁棚的吉祥物嗎 XDD
作者: CoNsTaR ((const *))   2016-09-13 20:48:00
其實我在想 會不會是編譯器支援過度了 直接把 pow 值算出來所以不會有 undefined reference但是如果遇到分數編譯器就不會先算 就真的呼叫了 pow 然後又沒有加 -lm 於是爆炸
作者: yvb   2016-09-13 21:59:00
gcc3.4 起支援 built-in pow() 運算, 但僅限整數的整數次方,及實數的正整數次方; 到 gcc4.3 支援更完整的內建常數 pow().上述的內建 pow() 都必須是常數參數, compile time 時就算好.
作者: CoNsTaR ((const *))   2016-09-13 22:28:00
推樓上博學多聞 XDD
作者: yvb   2016-09-13 22:39:00
不, 是 google 博學多聞, 最適合用來問冷知識了 XD
作者: CoNsTaR ((const *))   2016-09-13 23:22:00
其實推文就有大大說明了…
作者: descent (「雄辯是銀,沉默是金」)   2016-09-13 23:34:00
man pow 就有說要 -lm
作者: firejox (Tangent)   2016-09-13 23:57:00
說不定人家沒有man阿XD
作者: askacis (ASKA)   2016-09-14 00:54:00
長篇大論之前還是把基本中的基本學好吧
作者: CoNsTaR ((const *))   2016-09-14 01:07:00
誰說過的意義是不大 但是原Po連推文都不看問題就大了你要造輪子自己在旁邊學習玩沙的時候隨便你慢慢造
作者: firejox (Tangent)   2016-09-14 01:09:00
你不會為了開車而去組一台車子吧...
作者: CoNsTaR ((const *))   2016-09-14 01:11:00
但是回文說 include standard library 不是好現象是怎樣?你的學長這麼厲害 叫他多教教學弟啊 怎麼會讓學弟來 ptt問蠢問題人家給的建議一副愛理不理 不知道這串是在客氣什麼這麼厲害你的 gcc 怎麼會 undefined reference?回個文也要優越感這麼重 你要優越感是沒問題 先把基礎打好再說可以?之前還看你Po文說教學長“雙重指標”???學長學會了嗎?原來還是助教 抱歉我個人對C語言助教有非常大的偏見我大一的C語言段考被看不懂我答案的助教打41分看不懂就劃掉我怨念很深 助教還是重修100遍再來改考卷吧還有我不反對學習的時候造輪子 但是你說include standardlibrary是不好的現象是想怎樣?整篇就只會拿一些皮毛的東西來說嘴 發現自己的錯誤就巧妙迴避 你該不會覺得我說巧妙是在稱讚你吧然後順便幫樓上回答一下 你連基本是什麼都還要問那你還是不要來討論好了 另外學好就是你一直以為你自己已經做到的事 謝謝
作者: firejox (Tangent)   2016-09-14 01:55:00
Std lib 不好的地方 應該是如果程式有漏洞 很好開shellStd lib 不好的地方 應該是如果程式有漏洞 很好開shell吧XD
作者: CoNsTaR ((const *))   2016-09-14 02:06:00
看你態度不錯補推 不過不是很贊同你講的很多部分看來或許你真的不是一個這樣的人 如果是我誤會你 你有你該有的道歉批評我助教就免了 學習是一定要的
作者: Sirctal (母豬母豬 夜裡哭哭)   2016-09-14 09:01:00
大家是吃了火藥喔 好好談嘛 QQ
作者: askacis (ASKA)   2016-09-14 12:25:00
甚麼叫基本?你連gcc告訴你Error code都不願google一下還一廂情願的自以為是,要是我team的新人早就被我電了看了你的長篇大論跟你遇到問題表現出來的行為是兩回事
作者: art1 (人,原來不是人)   2016-09-14 13:45:00
搞不懂在噓什麼,願意教別人吃魚已經是很佛心的教法了
作者: yvb   2016-09-14 17:11:00
是教吃魚還是教用釣竿? 還是教 要吃魚一定要自己釣才好吃? :P
作者: Caesar08 (Caesar)   2016-09-14 17:22:00
教別人吃魚?????
作者: wtchen (沒有存在感的人)   2016-09-14 18:13:00
大家發文注意語氣喔
作者: CaptainH (Cannon)   2016-09-15 03:12:00
你學長是誰?一句廢話有什麼特別寫出來的必要?其實你只給code的話搞不好還不會有人噓XD
作者: s0914714 (YA)   2016-09-15 23:11:00
你開心就好
作者: longlongint (華哥爾)   2016-09-18 02:51:00
如果我工作壓力想找沙包打我會去健身房專案合作建議用通用的function學習取向 如果有空可以刻一個
作者: HolyBugTw (HolyBug)   2016-09-19 10:52:00
關於你的code我有兩個建議...如果你想自己刻又清楚自己做什麼,那麼你迴圈起始條件就應該設好,何必以0起始?另外最後字串結束的\0不是一定要加,而是多數人習慣是變數使用前都會初始,memset之後又何必多此一舉
作者: ronin728 (浪人)   2016-09-19 11:33:00
路過,朝聖
作者: APTON (瑋瑋)   2016-09-22 13:55:00
這篇對工作人事或許沒用 但是對還有漫長路程的學生來說是個好練習阿而且問問題的人又沒說明問題的用途, 這樣回應有甚麼不好
作者: b0920075 (Void)   2016-09-22 15:22:00
我覺得以學習來說瞭解原理是很好的學習方式,但是懂了之後能call就call吧,特別是有即刻需要的話還慢慢自己寫太麻煩
作者: abcsimps (= =)   2016-09-26 14:30:00
能理解當然是很好啦,但是工作怎麼可能什麼都讓你自己刻

Links booklink

Contact Us: admin [ a t ] ucptt.com