在這個 C 代碼中,我從一個字串中取出std::cin
每個char
專案并將其傳輸到一個char
陣列中。
int length; // length of the string
cin >> length;
char charList[length]; // list of the characters
string sequence; // string sequence
cin >> sequence;
for (int i = 0; i < length; i ) {
charList[i] = sequence[i];
}
我不確定這是否是正確的方法,或者我是否有什么問題。專案是否超出索引字串char
或string
型別?
uj5u.com熱心網友回復:
首先,回答您對 type: sequence[i]
is of type 的疑問char
。
接下來,關于您的實作:首先,正如許多人在評論中所建議的那樣,我建議不要將字串的長度與字串本身分開,因為輸入字串的長度可能與宣告的長度不同,并且這可能會導致各種問題(聽說過臭名昭著的錯誤心血嗎?)
所以,這是我要做的最少的事情:
string sequence; // string sequence
cin >> sequence;
char charList[sequence.length()]; // list of the characters
for (int i = 0; i < sequence.length(); i ) {
charList[i] = sequence[i];
}
但是,這仍然不夠令人滿意,因為上面的代碼不符合要求。換句話說,它不是有效的 C ,因為 C 并不真正允許變長陣列。根據編譯器,您可能會逃脫,例如 g 接受它,請參閱https://stackoverflow.com/a/15013295/12175820
但即使使用 g ,如果您使用該-pedantic
標志進行編譯,您也會收到以下警告:
str2arr.cpp:10:8: warning: ISO C forbids variable length array ‘charList’ [-Wvla]
10 | char charList[sequence.length()]; // list of the characters
這導致-Werror
了一個完整的編譯錯誤:
str2arr.cpp:10:8: error: ISO C forbids variable length array ‘charList’ [-Werror=vla]
10 | char charList[sequence.length()]; // list of the characters
另外,您可能在使用更高級的用法時遇到問題,例如我剛剛發現它typeid(charList)
無法使用可變長度陣列進行編譯...
因此,在 C 中真正做到這一點的方法是在堆中使用指標和動態記憶體分配,使用 operator new
:
string sequence; // string sequence
cin >> sequence;
char* charList = new char[sequence.length()]; // list of the characters
for (int i = 0; i < sequence.length(); i ) {
charList[i] = sequence[i];
}
上面的代碼是任何編譯器都接受的有效 C 。
uj5u.com熱心網友回復:
我認為擁有length
asunsigned
或size_t
可能比 int 更好。目前,如果 length 的輸入為 0 或負數,則可能會發生意外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/377107.html
上一篇:selenium UI自動化實戰