[問題] 回傳字串陣列

看板C_and_CPP (C/C++)作者 (灰狼)時間16年前 (2009/07/24 01:44), 編輯推噓4(4010)
留言14則, 5人參與, 最新討論串1/3 (看更多)
因為最近需要 所以常來發問 希望各位大大不要罵我...Orz... 話說 因為OpenCV都只接受 char型態的當作名字 今天我開啟noise.bmp 我想要把它存成noise_happy.bmp 於是我很異想天開的寫了 假設我今天用 setname("noise.bmp","happy") char setname(char name[20],char set[20]){ char temp[20],start[50],end[20]; int g=0; for(int i=0;i<20;i++,g++){ if(name[i]=='.') break; start[i]=name[i]; } for(int i=0;i<20;i++,g++){ end[i]=name[g]; } sprintf(temp,"%s_%s%s",start,set,end); return temp; } 簡單來說 就是把'.' 以前放到start '.'以後放到end 再用sprintf拼起來!!! 可是發生兩件悲慘的事情 1.最後跑出來 noise "_happy.bmp 就是在start的後面會出現奇怪的值 2.根本不能回傳 好像不能回傳char陣列這種型態 想請問一下各位大大 我哪裡做錯了...( ̄ー ̄;) 或是要怎麼改 甚至是有簡單的方法... 抱歉最近一直麻煩板上的各位大大 真的很感謝大家!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.139.4

07/24 01:50, , 1F
setname的規格要求return字元,你return的只是字元指標
07/24 01:50, 1F

07/24 02:10, , 2F
而且這違反了十戒之六
07/24 02:10, 2F

07/24 07:41, , 3F
你的回傳值是字元而已,假如要回傳的是指標那請改一下就可
07/24 07:41, 3F

07/24 08:27, , 4F
start後面會有奇怪的值, 是因為找到'.'之後, 沒有幫
07/24 08:27, 4F

07/24 08:28, , 5F
start補個'\0', 之後用sprintf+%s印就可能會印超過....
07/24 08:28, 5F

07/24 08:31, , 6F
然後看起來原po想做的是把char []陣列不是指標傳回去.
07/24 08:31, 6F

07/24 08:31, , 7F
會有像2F說的問題, 另外陣列也不能直接這樣return的.
07/24 08:31, 7F

07/24 08:32, , 8F
把要存result的陣列一起當參數傳進來是一個可行的作法.
07/24 08:32, 8F

07/24 08:33, , 9F
最後, char []在search/copy的時候也做邊界判斷較保險.
07/24 08:33, 9F

07/24 11:05, , 10F
歐歐 小弟愚昧 我會在去仔細看一次十誡 ~"~
07/24 11:05, 10F

07/24 11:42, , 11F
start[g] = '\0' ; 可以解決第一個問題
07/24 11:42, 11F

07/24 11:43, , 12F
但是第二個還是沒有辦法 = =
07/24 11:43, 12F

07/24 11:43, , 13F
有誰有什麼辦法嗎 我利用char const *want
07/24 11:43, 13F

07/24 11:43, , 14F
可是在function改過want 原來的還是沒變
07/24 11:43, 14F
文章代碼(AID): #1AQA5yKA (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AQA5yKA (C_and_CPP)