[問題] C++ string append 一直失敗?

看板C_and_CPP作者 (妤欣)時間4年前 (2019/09/25 16:46), 4年前編輯推噓5(5012)
留言17則, 8人參與, 4年前最新討論串1/1
VS 2017 struct XXX{ string name[10]; }; string list = {"A1", "A2", ......}; void func(){ struct XXX p; for loop to fill p.name[i] for i = 0 to 10-1 call send(p); } void send(struct XXX &p){ string str = ""; str.append("{") for(int i = 0; i < len; i++){ str.append(list[i]); str.append(":"); str.append(p.name[i]); // line HIGHLINE str.append(","); // 執行到這行, 結果沒有被成功 append } str.back(); str.append("}"); loop 跑完 結果還是只有 {A1:TaipeiMainStartion 完全看不出來問題的方向 line HIGHLIN 將這行改成 str.append("55555"); 反而整個字串就成功了 若我改成用 operator + 一樣的結果 QQQQQQQ 有高手前輩幫幫忙嗎~~ 感謝唷 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.32.115 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1569401163.A.42C.html ※ 編輯: OfficeGL (111.71.32.115 臺灣), 09/25/2019 16:54:08

09/25 17:27, 4年前 , 1F
你沒附上完整程式碼有點難通靈
09/25 17:27, 1F

09/25 17:30, 4年前 , 2F
你迴圈的len是什麼東西
09/25 17:30, 2F

09/25 17:30, 4年前 , 3F
p的內容又是什麼
09/25 17:30, 3F
len=10; p.name 內容是10個字串 TaipeiMainStation, Nangan, Taoyuan,..等10個 string

09/25 17:30, 4年前 , 4F
. VS ->
09/25 17:30, 4F

09/25 17:39, 4年前 , 5F
宣告 void send(struct XXX *p) 就用 p->name[i]
09/25 17:39, 5F

09/25 17:39, 4年前 , 6F
宣告 void send(struct XXX p) 就用 p.name[i]
09/25 17:39, 6F
嗯嗯,我是用reference void send(struct XXX &p); 透過p.name[i]取得 ※ 編輯: OfficeGL (111.71.32.115 臺灣), 09/25/2019 17:47:22

09/25 18:01, 4年前 , 7F
highline那行改了後會變成{A1:55555,A2:55555, ...}是嗎
09/25 18:01, 7F

09/25 18:02, 4年前 , 8F
不改就只有{A1:TaipeiMainStartion 然後跳出迴圈?
09/25 18:02, 8F
對的,所以我很無頭緒,迴圈其實有繼續跑到底 但是str不會再被更新,連第一次迴圈的最後,都沒有被加上去 ※ 編輯: OfficeGL (111.71.32.115 臺灣), 09/25/2019 18:09:37

09/25 18:13, 4年前 , 9F
照你描述只剩懷疑塞給p.name的code有問題, 方便貼嗎
09/25 18:13, 9F

09/25 18:15, 4年前 , 10F
我猜可能是struct的name陣列沒初始化讀到怪東西 先用
09/25 18:15, 10F
這邊應該沒問題,因為我單步驟執行,看變數內容是正確的 感覺跟c++ string有關係,我很一般的用 char buffer[] 初始化 name陣列 例如: p.name[i]=string(buffer+offset, lengthofstring) ※ 編輯: OfficeGL (111.71.32.115 臺灣), 09/25/2019 18:18:33

09/25 18:16, 4年前 , 11F
memset初始化 或直接用vector儲存字串
09/25 18:16, 11F

09/25 18:53, 4年前 , 12F
覺得是你的buffer或p.name沒處理好
09/25 18:53, 12F

09/25 22:11, 4年前 , 13F
你用bind去call的嗎
09/25 22:11, 13F

09/26 06:24, 4年前 , 14F
string list = {"A1", "A2", ......}; 改成string list[] =
09/26 06:24, 14F

09/26 06:24, 4年前 , 15F
{"A1", "A2", ......};
09/26 06:24, 15F

10/02 07:34, 4年前 , 16F
我猜是 TaipeiMainStartion\0
10/02 07:34, 16F

10/05 10:20, 4年前 , 17F
可能是類似這樣的情況? : https://ideone.com/hEAizi
10/05 10:20, 17F
文章代碼(AID): #1TYobBGi (C_and_CPP)