簡體   English   中英

將字符追加到字符末

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

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