我想用字符型別的指標宣告一個陣列,陣列的長度可以由我的輸入字串確定。
我是這樣寫的:
char *s;
cout << "Enter a string: " << endl;
cin >> s;
我希望我可以通過cin操作來初始化字串,但是編譯時出現了錯誤。該錯誤是關于“二進制運算式的無效運算元”。
我不知道為什么我寫的行是錯誤的。我雖然不僅內置string類用于宣告陣列。
C 中的資料型別不是string和“字符陣列”一樣嗎?
該行不是char *s表示指標s指向字符陣列(或字串)嗎?
謝謝!
uj5u.com熱心網友回復:
你應該使用std::string.
它是一個表示字串的類。它不同于舊的 c 樣式字符陣列(盡管內部可能包含一個字符)。
在你的情況下:
#include <string>
#include <iostream>
std::string s;
std::cout << "Enter a string: " << endl;
std::cin >> s;
使用std::string意味著記憶體會自動為您管理。特別是cin它也將調整大小以適應輸入。
旁注:最好避免using namespace std- 請參閱此處為什么“使用命名空間 std;” 被認為是不好的做法?.
uj5u.com熱心網友回復:
“cin操作”。
cin真的是源頭。真正的作業是由多載的operator>>. 而operator>>which 讀取到 achar*期望char*已經分配到正確的大小。這當然是cin大小未知的問題。
operator>>讀取的多載std::string將調整大小std::string到正確的大小。
uj5u.com熱心網友回復:
您的問題的答案是否定的,因為當您創建型別指標時,您總是必須提前指定要分配多少記憶體。我們可以想象,這就是字串發生的情況,即去取資料并在稍后將占用的單元格排列在記憶體中。
現在真正的問題是,您確實宣告了一個指向字符的指標,但您沒有指定為它分配多少。就好像你說你想創建一個盒子,但你沒有指定大小。我告訴你正確的方法:
char *s = new char[10];
顯然,在使用指標時,請始終記住在使用結束時釋放它們,以免發生任何記憶體泄漏。
總結一下情況,您嘗試將資料保存在您打算創建但不存在的框中。也就是說,您已將名為的框命名為s將包含 apointer to a character但您尚未構建/創建它的最終大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533209.html
標籤:C 数组细绳字符
上一篇:以指標作為引數傳遞一個雙精度陣列
