簡體   English   中英

如何在不知道其大小的情況下迭代讀取的字符串?

[英]How to iterate a string in which was read without knowing its size?

不建議char s[] = ""在不知道字符串大小的情況下讀取字符串嗎?

char s[] = "";
cin >> s;
cout << s[2];  // this is working
int k = 2;
cout << s[k]; // while this does not

有任何想法嗎?

您正在創建一個長度為1的char數組,其中包含字符'\\0' 如果cins寫入了空字符串以外的任何內容,它將溢出數組的邊界,從而導致未定義的行為。 不要將cin與數組一起使用; 使用string代替。

string s;
cin >> s;

然后,您必須檢查使用的字符索引是否是入站的,否則您將再次得到未定義的行為。

if (k < s.size()) {
    cout << s[k];
}

所以不,在不知道數組大小的情況下訪問數組(或string )是不安全的。

“ s”是1個字符的數組。 當您從cin讀取時,超出第一個字符的所有內容都會超出所分配的's'大小,從而導致不確定的行為。 可能是'beyond'部分實際上位於'k'中,該部分適用於第一個cout,但是在為第二個cout初始化k之后失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM