[英]Appending character to end of char
我正在嘗試在char的末尾添加一個空格,這是我正在測試的代碼,它會拋出Bus Error
;
int main() {
char* test = "Test";
printf("%s\n", test);
strcat(test, "a");
printf("%s\n", test);
return 0;
}
"Test"
是一個字符串文字,您不能對其進行修改。 如果您更改:
char * test = "Test";
至:
char test[10] = "Test";
它會按您預期的那樣工作。
編輯:有人在評論中談論過是否應該導致編譯器警告。 在C中, char * test = "Test";
格式正確,不應發出任何警告。 在任何合理的實現中, strcat()
都將被預先編譯很長時間,因此它不會向您發出任何警告,並且由於它希望將char *
作為其第一個參數,因此您應該通過它,因此不應也會導致警告。 可能您會擁有一個非常聰明的編譯器,既會記住您將test
指向了字符串文字,又沒有將其指向任何其他東西, 並且知道strcat()
將會對其進行更改,但這似乎不太可能,所以我懷疑您會在這里收到任何警告。 這只是您必須了解和避免的事情之一。
我相信C ++的情況有所不同。 使用g++ -std=c++11
編譯可以避免deprecated conversion from string constant to 'char *'
警告的轉換,您可以通過將其更改為const char * test = "Test";
來消除該警告const char * test = "Test";
當您嘗試將const char *
傳遞給strcat()
,這將給您帶來新的錯誤,該strcat()
期望使用純char *
。 C ++類型檢查比C語言更嚴格。
這里的主要問題是test
指向文字字符串,文字字符串是常量,因此是只讀的。 嘗試更改文字字符串是未定義的行為 。
如果要在字符串后附加字符,則必須先分配它。 在堆棧上(例如帶有malloc
)在堆棧上作為數組。 分配的內存還必須足夠大以能夠容納額外的字符,在這種情況下,它必須至少包含六個字符:四個用於字符串"Test"
,一個用於字符'a'
,一個用於特殊字符終止所有字符串。
int main() {
char* test = malloc(NUMBER_OF_BYTES);
strcpy(test,"Test");
printf("%s\n", test);
strcat(test, "a");
printf("%s\n", test);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.