作者:
MrPanda (不人氣揪團師)
2017-12-10 13:03:18開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
問題(Question):
程式碼使用Dev C++輸出結果正常
但是使用VC執行,結果後端會出現一堆亂碼
餵入的資料(Input):
條件
1. 遇到符號'.'為結數字元
2. 以空白鍵當作做為區隔單字識別字元
3. 長度一樣則輸出第一個
輸入測試字串
I am a normal ptt user like everybody.
Hello world.
預期的正確結果(Expected Output):
https://imgur.com/a/lvtaJ
錯誤結果(Wrong Output):
https://imgur.com/a/Po9Ep
https://imgur.com/a/CBkl9
程式碼(Code):(請善用置底文網頁, 記得排版)
https://ideone.com/AZiEjb
補充說明(Supplement):
不曉得是不是因為VC會自動輸出
string str_arr[10] = {};
後面所有沒有被初始化或是指定值的部分?
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.104.9
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1512882203.A.BE1.html
※ 編輯: MrPanda (111.246.104.9), 12/10/2017 13:06:22
※ 編輯: MrPanda (111.246.104.9), 12/10/2017 13:07:39
作者:
galic (嘎利)
2017-12-10 13:16:00你可能要先弄清楚C-style string是null-terminatedstr2最後並沒有擺入最重要的'null' character
作者: longlongint (華哥爾) 2017-12-10 13:30:00
為什麼不先跑一下課本範例呢
建議你把cppreference的list initialization看個一輪問題通通迎刃而解
作者:
galic (嘎利)
2017-12-12 17:34:00樓上示範一下如何在讀完你說的參考資料以後 寫出"迎刃而解"的程式碼
str1~str3就少了一個空的{}加上去後會對陣列作聚合初始化,因為{}為空,每個char以{}初始,經值初始化後為0
作者:
galic (嘎利)
2017-12-12 18:46:00正確的初始化的確是好習慣 也能降低程式錯誤的機率 但是這篇的問題是 他的C-style Strings 並沒有包含Null Character而且Null Character可不等於0阿
作者:
galic (嘎利)
2017-12-12 19:08:00規格書:null character是個byte且所有的bits都被設成0但是0這個literal 卻不一定是一個byte
作者:
galic (嘎利)
2017-12-12 20:34:00還是錯啊
已經跑完確認過了,改那四行就沒有問題str2一開始的0初始化就會把null charatcer填進去是500個byte全部被清0,到底錯在哪str2按程式邏輯不會全部被str1填值,至少str2[499]會是null character
作者:
galic (嘎利)
2017-12-12 22:21:00錯在邊吃火鍋邊看程式碼 沒看到32行 XD這樣寫還不太好啦 下次還是可能會遇到類似問題我想表達的是 你不該為了一個null character 不斷的去把整個buf寫0 至少效能上也有疑慮