簡體   English   中英

在 C 中創建字符串的不同方法

[英]different ways to create string in C

我正在尋找了解創建字符串的每種方法的優缺點,有人可以幫助我嗎?

char x[] = {'a', 'b', 'c', '\0'};

或者

char x[]="abc";

或者

char *p;
p="abc";

我忘記了其他方法嗎? 謝謝你。

char x[]={{'a'},{'b'},{'c'},{'\0}};

除了'\\0之后缺少的撇號,這通常應該是char x[] = {'a', 'b', 'c', '\\0'}; . C 語法允許帶有單個標量初始值設定項的額外大括號,但編譯器通常會對此發出警告,因為它表示錯誤——大括號通常用於表示聚合對象(如數組或結構)的組合。

撇號固定后,這將x定義為包含四個字符的數組,分別是 a、b、c 和空字符。 這種格式很乏味,所以實際上沒有人以這種方式定義數組,除非有一些特殊情況,例如需要使用表達式定義一個字符,或者當數組被定義用於某些目的而不是用作字符串時並且希望強調這一點。

char x[]="abc";

這將x定義為與上面相同的四個字符。 這是定義字符數組的常用方法。

這兩種初始化方法在C語義上沒有區別; 兩者都定義了相同的數組,因此在它們之間進行選擇的唯一原因是人類如何與它們交互——這更容易閱讀、更容易編輯而不會出錯,等等。

char *p;
p="abc";

這是一個定義和一個賦值。 最好寫成char *p = "abc"; 除非有理由不這樣做。

這將p定義為指向與上述相同的四個字符的靜態數組的指針。 僅使用 this 來定義數組並不常見,因為它會創建一個不必要的指針p 它通常僅在需要一個最初指向靜態數組但以后可能會更改的指針時使用。

當然還有另一種方式。 您可以使用復合文字立即初始化或分配指針。 這種初始化創建指向可修改字符串的指針。

char *p = (char[]){"ASDF"};

int main()
{
    p[2] = 'X';
    printf("%s\n", p);
}

https://onlinegdb.com/H19BLahy8

char x[] = {'a', 'b', 'c', '\\0'}; char x[] = "abc";

使用malloc() (和朋友)

char *p = malloc(4);
if (!p) { /* error; */ exit(EXIT_FAILURE); }
strcpy(p, "abc");
free(p);

使用復合文字(不同於字符串文字)

char *example(char *p) {
    p[0] = 'A';
    p[2] = 'C';
    return p;
}
example((char[4]){"abc"}); // unnamed object

暫無
暫無

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

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