[英]how to initialize static char array with NULL(or 0) in c++
我試圖像這種語法一樣用 NULL 初始化 char 數組。
char str[5] = NULL;
但它返回錯誤.. 如何在 C++ 中用 NULL 或 0 初始化字符數組?
具體來說,我想在這個示例代碼中打印“Hello”。
#include <iostream>
int main()
{
char str[5] = NULL;
if(!str)
std::cout << "Hello" << std::endl;
return 0;
}
由於初始化不正確,此代碼將返回錯誤。 那么,我應該用什么初始化句子替換句子?
數組不能為空。 Null 是指針的狀態,數組不是指針。
在表達式!str
,數組將衰減到第一個元素的地址。 這個衰減地址的類型是一個指針,但是你不能修改這個衰減的指針。 由於數組永遠不會存儲在地址 0 中(除非在嵌入式系統上的某些特殊情況下,數組可能實際上存儲在該內存位置),因此!str
永遠不會為真。
您可以做的是將數組的所有子對象初始化為零。 這可以使用值初始化語法來實現:
char str[5]{};
正如我之前解釋過的, !str
仍然沒有意義,並且始終為 false。 您可能會做的一件明智的事情是檢查數組是否包含空字符串。 空字符串除終止符外不包含任何內容(數組可以在終止符之后包含元素,但這些元素不是字符串的一部分)。
檢查字符串是否為空的最簡單方法是檢查第一個字符是否為終止符(值初始化字符將是終止符,因此值初始化字符數組確實包含空字符串):
if (!str[0]) // true if the string is empty
//...
char str[5] = {'\0'};
if (str[0] != '\0')
//...
如果您現在將一些字符放入 str 它將打印 str 直到最后一個 '\\0'。 每個字符串文字都以 '\\0' 結尾,你必須確保你的數組也以 '\\0' 結尾,否則,數據將被讀取到你的數組之外(直到遇到 '\\0' )並且可能超出你的應用程序的內存空間在這種情況下,您的應用程序將崩潰。
但是如果你需要一個字符串,你應該使用 std::string 或 QString 。
您不能使用NULL
初始化字符數組,數組永遠不能為NULL
。 您似乎混淆了指針和數組。 指針可以用NULL
初始化。
您可以使用 0 初始化數組的字符,即
char str[5] = {0};
但我認為這不是你要問的。
#include <stdio.h>
using namespace std;
int main() {
char str[5];
for(int i=0;i<5;i++){
str[i]=NULL;
}
printf("success");
return 0;
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.