看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win 10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Leetcode 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 如何使用pointer去取substring 餵入的資料(Input):預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://pastebin.com/viUgV0FU 補充說明(Supplement): 想達成的目的是: 有一個變數為 char *b="1234567"; 想利用pointer去取到"4567"這樣, 雖然pointer的觀念不是很熟悉, 但大概知道,array的用法就是起頭的pointer加上bias, 一開始是想說,把char *a這個變數指到b[3]的位址, 然後直接printf出這個a,但ㄧ直出錯 找了找網路上的方法,都是用一格一格去複製到a的, 但我覺得這樣效率不好,因為我想做的題目若這樣做的話,時間複雜度會提高很多, 如果直接用pointer去指,可能會快速很多。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.154.216 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1614053845.A.A52.html
nh60211as: 你 &b[3] = b; 在幹嗎 02/23 12:20
那個程式碼有些地方是亂打的XDD 不好意思沒有刪乾淨, 我剛剛試了一下,這樣是可以實作出我想做的: const char b[] = "1234567"; const char *a; a = &b[3]; printf("%s",a); 看來b的宣告是個關鍵。有人可以跟我說為什麼嗎QQ 我C苦手 ※ 編輯: ericerix (211.23.154.216 臺灣), 02/23/2021 12:21:55
nh60211as: 都沒問題餒,有完整程式碼嗎 02/23 12:25
james732: 個人建議先寫出正確的程式,效能考量再針對瓶頸最佳化 02/23 13:27
KaryuuIssen: 感覺你好像解決了? 沒看懂你想問什麼 02/23 15:41
pinefruit: 用你試出的方法 a = &b[3],或是 a = b + 3 都可以。 02/23 16:02
pinefruit: 另外,b 要宣告成陣列或指標對這問題並沒有影響。 02/23 16:03
ctrlbreak: 我覺得他是不知道這樣寫printf("%s",b[3]);為什麼會錯 02/23 18:19
peterbrucele: 與樓上同感 似乎沒看清楚data type? 02/24 00:49
TeaEEE: %c 02/24 08:45
已經解決了,昨天莫名其妙都搞不出解答 完整一點: char *s = "1234567"; printf("%s",s); // "1234567" s = &s[3]; printf("%s",s); // "4567" 是可以解決的 謝謝大家! ※ 編輯: ericerix (140.115.50.48 臺灣), 02/24/2021 09:29:08
ctrlbreak: s = &s[3]; // 有點恐怖 02/24 12:17
怎麼說呢? 不過我似乎把陣列當link list使用了.. ※ 編輯: ericerix (140.115.53.191 臺灣), 02/24/2021 13:34:26
annheilong: 應該寫 s = s+3; 02/24 16:59
philip80220: char *s="1234567"; <-不要這樣宣告啊~看一下十三誡 02/24 23:46
philip80220: 的第四點 02/24 23:46