初學小白,因為對DEV實在無力吐槽,開始嘗試使用VS的編譯器,但為什么在使用程序中,總會出現一些令人糟心的問題:一些無語法邏輯錯誤的代碼,在別的編譯器(DEV,手機端的sololearn)可以運行,而在VS上總是會莫名報錯?

不知不覺就懷疑人生了

比如下述:

可是在“該死”的DEV上,它又成功了,,

是不是VS本身對C的某些規則做了調整,而對C++/C#更友好?到底有沒有個標準呢?
求大佬釋疑
uj5u.com熱心網友回復:
揭示說得很清楚了!VS認為strcpy函式不安全,建議替換成它說的那個!
當然也可以通過那個_CRT_SECURE_NO_WARNINGS來強制使用,如何操作需要查幫助檔案!
個人的建議:重視編譯的提示,如果不懂英文,就查字典吧
uj5u.com熱心網友回復:
替換后出現了更多新的問題,不是那么提示簡單。
uj5u.com熱心網友回復:
暈死!替換了是呼叫另一個函式了,引數不用修改成新函式的版本嗎?
uj5u.com熱心網友回復:
揭示說得很清楚了!
VS認為strcpy函式不安全,建議替換成它說的那個!
當然也可以通過那個_CRT_SECURE_NO_WARNINGS來強制使用,如何操作需要查幫助檔案!
個人的建議:重視編譯的提示,如果不懂英文,就查字典吧
替換后出現了更多新的問題,不是那么提示簡單。
暈死!替換了是呼叫另一個函式了,引數不用修改成新函式的版本嗎?
不要折磨新手,多謝提醒!我再摸索摸索
uj5u.com熱心網友回復:
算了,我再多說幾句吧:1、出現問題別怕,英文不好也別怕,硬上就是了;
2、多用腦子,比如dev也好,VS系列也好,不可能一個簡單的C程式也搞不定,根據提示查找原因就是了,老是換IDE沒有必要;
3、strcpy_s和strcpy的區別問題,其實可以想象到呼叫方式是不一樣的,如果一樣的話,就沒有必要專門搞一個strcpy_s了,只要重寫strcpy的實作代碼就行了;
4、積極利用搜索引擎,因為你可能碰到的問題,基本上別人也會遇到,比如本問題只要搜索strcpy_s,百度的第一個結果就把我在1樓的兩種辦法都講清楚了,其中仍然使用strcpy的方案只需要加一行代碼就可以了。不過我這里就不給出連接了,樓主自己去搜一下吧
uj5u.com熱心網友回復:
算了,我再多說幾句吧:
1、出現問題別怕,英文不好也別怕,硬上就是了;
2、多用腦子,比如dev也好,VS系列也好,不可能一個簡單的C程式也搞不定,根據提示查找原因就是了,老是換IDE沒有必要;
3、strcpy_s和strcpy的區別問題,其實可以想象到呼叫方式是不一樣的,如果一樣的話,就沒有必要專門搞一個strcpy_s了,只要重寫strcpy的實作代碼就行了;
4、積極利用搜索引擎,因為你可能碰到的問題,基本上別人也會遇到,比如本問題只要搜索strcpy_s,百度的第一個結果就把我在1樓的兩種辦法都講清楚了,其中仍然使用strcpy的方案只需要加一行代碼就可以了。不過我這里就不給出連接了,樓主自己去搜一下吧
多謝指導!!
uj5u.com熱心網友回復:
在程式開頭加上:#define _CRT_SECURE_NO_WARNINGS
或者:
#pragma warning(disable:4996)
IDE中也可以設定,而且能夠全域有效,不止是對一個程式,我忘記在哪設定了,你自己找找
uj5u.com熱心網友回復:
在程式開頭加上:
#define _CRT_SECURE_NO_WARNINGS
或者:
#pragma warning(disable:4996)
IDE中也可以設定,而且能夠全域有效,不止是對一個程式,我忘記在哪設定了,你自己找找
感謝啊!!??
uj5u.com熱心網友回復:
如果學c的話,我個人認為不要用vs,它對c的標準支持不好。uj5u.com熱心網友回復:
那你能不能給個建議呢
uj5u.com熱心網友回復:
如果學c的話,我個人認為不要用vs,它對c的標準支持不好。
dev的界面實在太丑了,,VC2010可靠的資源包找不到,code block又是全英版
uj5u.com熱心網友回復:
我一般很少寫c程式,所以用的是vs,網上介紹的cfree,gcc應該都可以uj5u.com熱心網友回復:
如果學c的話,我個人認為不要用vs,它對c的標準支持不好。
dev的界面實在太丑了,,VC2010可靠的資源包找不到,code block又是全英版
試一下這個:
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/
下載完了可以檢查一下SHA1:
SHA1: 44B73423A7BBCE38D06BA55ECD821946630BEA4D ISO/CRC: 6CC0C796
uj5u.com熱心網友回復:
學c用Linux或者mac這類Unix like的系統最好
uj5u.com熱心網友回復:
如果學c的話,我個人認為不要用vs,它對c的標準支持不好。
dev的界面實在太丑了,,VC2010可靠的資源包找不到,code block又是全英版
試一下這個:
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/
下載完了可以檢查一下SHA1:
SHA1: 44B73423A7BBCE38D06BA55ECD821946630BEA4D ISO/CRC: 6CC0C796
好的,感謝!!
uj5u.com熱心網友回復:
如果學c的話,我個人認為不要用vs,它對c的標準支持不好。
dev的界面實在太丑了,,VC2010可靠的資源包找不到,code block又是全英版
試一下這個:
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/
下載完了可以檢查一下SHA1:
SHA1: 44B73423A7BBCE38D06BA55ECD821946630BEA4D ISO/CRC: 6CC0C796
好的,感謝!
uj5u.com熱心網友回復:
學c用Linux或者mac這類Unix like的系統最好
難道我為了個C,還去弄個Linux?

uj5u.com熱心網友回復:
code blocks有中文語言包的,百度一下。uj5u.com熱心網友回復:
VSCode 里面的 MinGW64 之類的編譯器和你 Dev 的編譯器有些不同。關于指標的非法訪問 / 溢位,32位機與64位不同,不同的編譯器又不同。
所以建議之后別用指標了,因為陣列可以實作所有指標的效果。(當然指標好寫是顯然的,不過RE了很玄學難除錯)
uj5u.com熱心網友回復:
好的,更喜歡vs的界面
uj5u.com熱心網友回復:
VSCode 里面的 MinGW64 之類的編譯器和你 Dev 的編譯器有些不同。
關于指標的非法訪問 / 溢位,32位機與64位不同,不同的編譯器又不同。
所以建議之后別用指標了,因為陣列可以實作所有指標的效果。(當然指標好寫是顯然的,不過RE了很玄學難除錯)
感謝大佬指點迷津!
uj5u.com熱心網友回復:
jetbrains它不香嗎
還有樓上不用指標的,C沒了指標他還是C嗎
uj5u.com熱心網友回復:
jetbrains它不香嗎
還有樓上不用指標的,C沒了指標他還是C嗎
另有高見??

uj5u.com熱心網友回復:
安全C API,我個人覺得這個蠻矛盾的。包括一組_s結尾的函式,本來就很古怪。再加上windows奇葩的tchar _t 封裝,簡直,額,太不優雅了。C-API的安全版本主要是考慮應對緩沖區溢位漏洞而設計的,比如下面的代碼:
char buf[1024];
gets(buf);
這個時候,如果用戶輸入了超過1024個字符,buf就越界了。學過匯編的人知道,后面的位元組會覆寫當前程式運行的背景關系。經過精心設計的資料,可讓下一條陳述句轉到惡意代碼里,比如下載個東西、或者感染病毒。
要是和windows API混起來,牽扯上UNICODE-16與本地代碼葉的兼容,就會遇到
puts_s
_putts
_stprintf_s
等亂七八糟的名字,實在是可惡!!正因為這樣,我才拋棄了很多平臺特性,投奔 mingw + Qt 去也。
uj5u.com熱心網友回復:
windows下基本沒有能比得過vs的ide了如果對這方面感興趣,或者有長遠需求,可以嘗試linux平臺
關于陣列可以代替指標的說法,那只能說還只學了點皮毛,C是系統級語言,指標才是靈魂
uj5u.com熱心網友回復:
windows下基本沒有能比得過vs的ide了
如果對這方面感興趣,或者有長遠需求,可以嘗試linux平臺
關于陣列可以代替指標的說法,那只能說還只學了點皮毛,C是系統級語言,指標才是靈魂
我懂你意思,陣列和指標不是一個量級的。
但是他回答關于VS和DEV在C的編譯區別好像還挺有道理的
uj5u.com熱心網友回復:
windows下基本沒有能比得過vs的ide了
如果對這方面感興趣,或者有長遠需求,可以嘗試linux平臺
關于陣列可以代替指標的說法,那只能說還只學了點皮毛,C是系統級語言,指標才是靈魂
我懂你意思,陣列和指標不是一個量級的。
但是他回答關于VS和DEV在C的編譯區別好像還挺有道理的
喜歡gcc的話可以用mysy2配置mingw工具鏈,ide可以選CLion,除錯功能沒有vs強,不過智能水平高多了,寫代碼挺舒服
uj5u.com熱心網友回復:
so professional ~
mingw+ Qt能解釋下嗎
uj5u.com熱心網友回復:
windows下基本沒有能比得過vs的ide了
如果對這方面感興趣,或者有長遠需求,可以嘗試linux平臺
關于陣列可以代替指標的說法,那只能說還只學了點皮毛,C是系統級語言,指標才是靈魂
我懂你意思,陣列和指標不是一個量級的。
但是他回答關于VS和DEV在C的編譯區別好像還挺有道理的
喜歡gcc的話可以用mysy2配置mingw工具鏈,ide可以選CLion,除錯功能沒有vs強,不過智能水平高多了,寫代碼挺舒服
感謝分享!!
uj5u.com熱心網友回復:
就不能直接下一個企業版的VS2019嗎?硬是要在VSCODE上折騰
uj5u.com熱心網友回復:
就不能直接下一個企業版的VS2019嗎?硬是要在VSCODE上折騰
你老走錯片場了~~這說的就是vs
uj5u.com熱心網友回復:
不知道誒qwquj5u.com熱心網友回復:
laikankanuj5u.com熱心網友回復:
DEV是MinGW的編譯器,VS確實不一樣uj5u.com熱心網友回復:
反正呢,Dev-c++ 的編譯器是自帶的,而 VSCode 的編譯器是你自己下載的(配置路徑),我并不知道你下載了什么編譯器所以難以說出問題根本啦。。不同的編譯器對于報錯可能會不同,有的不報錯但是RE,有的報錯。
所以說呢,您VSCode用的什么編譯器呢?
uj5u.com熱心網友回復:
反正呢,Dev-c++ 的編譯器是自帶的,而 VSCode 的編譯器是你自己下載的(配置路徑),我并不知道你下載了什么編譯器所以難以說出問題根本啦。。
不同的編譯器對于報錯可能會不同,有的不報錯但是RE,有的報錯。
所以說呢,您VSCode用的什么編譯器呢?
我下的就 Visual Studio 2019 community版本啊
uj5u.com熱心網友回復:
反正呢,Dev-c++ 的編譯器是自帶的,而 VSCode 的編譯器是你自己下載的(配置路徑),我并不知道你下載了什么編譯器所以難以說出問題根本啦。。
不同的編譯器對于報錯可能會不同,有的不報錯但是RE,有的報錯。
所以說呢,您VSCode用的什么編譯器呢?
我下的就 Visual Studio 2019 community版本啊
那應該是編譯器不同的緣故了。
但是,只要自己不寫一些有異議的代碼就不會出問題。
比方說有的編譯器除以0不會報錯,有的就報錯。
指標也是一樣,萬一訪問非法記憶體、溢位等的,根據編譯器的不同有不同的反應
uj5u.com熱心網友回復:
感覺很不錯的樣子,順便看看十五個字是不是真有積分,積分快來啊,真的很需要積分了uj5u.com熱心網友回復:
關鍵就是這玩意沒個定準,每次要碰到這種情況,之前好不容易建立起來的認知又被打亂了啊
uj5u.com熱心網友回復:
關鍵就是這玩意沒個定準,每次要碰到這種情況,之前好不容易建立起來的認知又被打亂了啊
uj5u.com熱心網友回復:
在最前面加上#define_CRT_SECURE_NO_WARNINGS就好了uj5u.com熱心網友回復:
學c用Linux或者mac這類Unix like的系統最好
難道我為了個C,還去弄個Linux?
是的,其實 linux 除錯 C 方便多了,這個世界有 vmware 的
uj5u.com熱心網友回復:
我也遇到過,VS個人感覺語法比其他IDE更加嚴格。比如一個定義一個陣列,陣列長度從鍵盤輸入。在VS會報錯,在其他IDE可以運行。除非用malloc函式申請uj5u.com熱心網友回復:
哎呀,strcpy_s(); 就是智能有點高了:你不需要處理雙位元組碼,也不需要擔心亂碼問題,也不用管記憶體操作有關的復雜性。使用dev,這些問題恐怕大多數人都搞不定。uj5u.com熱心網友回復:
VS 檢查的太好。提前暴露出可能存在的隱患。
讓你少被坑。
但對于學習者來說,也避免了踩坑的機會。個人認為不大友好。
越是往細處走越是能接近問題的本質,越是能了解、理解問題的本質。
初學者,學習者的話,盡量用點“不完美”的IDE。才有機會遇到他們的“不完美”,去解決了,是一種深刻的記憶,是一種進步。
盡量少用封裝好的東西。不必在太過熟悉的windows下學習。語法掌握后不要再用ide。用文本編輯器大概寫一些代碼,直接用編譯器生成幾個試試。
【以上是學習時該干的事情】
這些閱盡后,在實際的開發程序中,反而更簡單了許多。用者封裝最好的“相對最完美的”ide、環境、庫...高效地寫著坑很少的代碼
uj5u.com熱心網友回復:
VS 檢查的太好。
提前暴露出可能存在的隱患。
讓你少被坑。
但對于學習者來說,也避免了踩坑的機會。個人認為不大友好。
越是往細處走越是能接近問題的本質,越是能了解、理解問題的本質。
初學者,學習者的話,盡量用點“不完美”的IDE。才有機會遇到他們的“不完美”,去解決了,是一種深刻的記憶,是一種進步。
盡量少用封裝好的東西。不必在太過熟悉的windows下學習。語法掌握后不要再用ide。用文本編輯器大概寫一些代碼,直接用編譯器生成幾個試試。
【以上是學習時該干的事情】
這些閱盡后,在實際的開發程序中,反而更簡單了許多。用者封裝最好的“相對最完美的”ide、環境、庫...高效地寫著坑很少的代碼
越是往細處走越是能接近問題的本質,越是能了解、理解問題的原因。
uj5u.com熱心網友回復:
VS 檢查的太好。
提前暴露出可能存在的隱患。
讓你少被坑。
但對于學習者來說,也避免了踩坑的機會。個人認為不大友好。
越是往細處走越是能接近問題的本質,越是能了解、理解問題的本質。
初學者,學習者的話,盡量用點“不完美”的IDE。才有機會遇到他們的“不完美”,去解決了,是一種深刻的記憶,是一種進步。
盡量少用封裝好的東西。不必在太過熟悉的windows下學習。語法掌握后不要再用ide。用文本編輯器大概寫一些代碼,直接用編譯器生成幾個試試。
【以上是學習時該干的事情】
這些閱盡后,在實際的開發程序中,反而更簡單了許多。用者封裝最好的“相對最完美的”ide、環境、庫...高效地寫著坑很少的代碼
越是往細處走越是能接近問題的本質,越是能了解、理解問題的原因。
感謝大佬分享經驗!你們太熱情了!!

用到現在感覺現在社交媒體上最專注問題本身的論壇居然只有CSDN??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84709.html
標籤:新手樂園
