[英]C++ issue with new char[]
有人可以向我解釋一下,當我只要求 3 個時,為什么在 char tab[] 中有 4 個額外的插槽? 如何擺脫它們? 我在 Visual Studio 2017 中編碼。編輯:第一個程序非常基本,沒有顯示我的意圖。 所以,有一個擴展。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int i, n;
vector<char> input;
char chp;
cout << "Enter a expression" << endl;
while (1)
{
cin.get(chp);
if (chp == '\n') break;
input.push_back(chp);
}
n = input.size();
char* tab = new char[n] {};
for (i = 0; i < n; i++)
{
tab[i] = input[i];
}
int l = strlen(tab);
for (int i = 0; i < l; i++)
{
cout << "tab[" << i << "] is " << tab[i] << endl;
}
cin.get();
}
控制台窗口中的結果類似,當我輸入“3+3”時
選項卡 [0] 是 3
選項卡 [1] 是 +
選項卡 [2] 是 3
制表符 [3] 是 ř
制表符 [4] 是 ř
制表符 [5] 是 ř
制表符 [6] 是 ř
這還不是完整的程序(完整的程序是一個計算器,可以計算任何數學表達式,而且要長得多)。 我很久以前在 C 中寫過,在 C 中動態數組不是這樣的問題。
另外,多維數組呢? 字符串也可以成為他們的解決方案嗎?
有人可以向我解釋一下,當我只要求 3 個時,為什么在 char tab[] 中有 4 個額外的插槽?
沒有。 該數組只有 3 個元素。
問題是您的數組元素具有不確定的值。 由於將指向不確定值數組的指針傳遞給strlen
,程序的行為是未定義的。
解決方案:初始化您的陣列。 此外,按照strlen
要求初始化它,使其包含一個空終止符:
char* tab = new char[3]{'a', 'b', '\0'};
作為空終止的替代方法,不要使用strlen
來獲取長度。 您已經知道該數組包含 3 個元素。 但是在將它們插入輸出流之前,這些值仍然必須被初始化。
PS不要忘記刪除您分配的內存:
delete[] tab;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.