[英]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'
。 如果cin
向s
寫入了空字符串以外的任何內容,它將溢出數組的邊界,從而導致未定義的行為。 不要將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.