簡體   English   中英

如何在c ++中使用NULL(或0)初始化靜態字符數組

[英]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.

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