簡體   English   中英

無法修改char數組

[英]Cannot modify char array

請考慮以下代碼。

char message[]="foo";

void main(void){
    message[] = "bar";
}

為什么MPLAB IDE v8.63中存在語法錯誤? 我只是想改變字符數組的值。

像。這樣的作業

message[] = "bar";

要么

message = "bar";

C.不支持

初始賦值的工作原理是它實際上是數組初始化偽裝成賦值。 編譯器解釋

char message[]="foo";

char message[4] = {'f', 'o', 'o', '\0'};

實際上這里沒有涉及字符串文字"foo"

但是當你嘗試時

message = "bar";

“bar”被解釋為實際的字符串文字,不僅如此,而且message不是可修改的左值,即。 你不能分配東西。 如果要修改數組,則必須逐個字符地執行:

message[0] = 'b';
message[1] = 'a';

等,或(更好)使用為你做的庫函數,如strcpy()。

聲明后你不能使用這樣的字符數組。 如果要為字符數組指定新值,可以這樣做: -

strcpy(message, "bar");

只有在聲明char數組時才能在初始化時執行此操作

message[] = "bar";

您無法在代碼中執行此操作

要修改它,可以使用<string.h> strcpy

strcpy(message, "bar");

你不能像這樣改變字符數組。 如果要更改字符數組的值,則必須通過修改單個字符來更改它,或者可以使用

strcpy(message,"bar");
char message[]="foo";

此語句導致編譯器創建4 char變量的內存空間。此內存集群的起始地址是message指針值。 message地址不可更改,您無法更改其指向的地址。 在這種情況下,您唯一的機會是更改message指向的數據。

char* message="foo"

在這個時候,創建內存來存儲指針的地址,因此message點在執行期間可以改變的地址。 然后你可以放心地做message="bar"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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