簡體   English   中英

C char數組連接

[英]C char array concatenation

是)我有的:

char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};

所以我想通過添加v的字母來連接cmd

明顯:

strcat(cmd, v[3]);

不起作用,因為strcat不接受v[n]參數n = int

嗯。 據我所知,你想從第二個數組中添加一個char? 所以你必須使用

  strncat (cmd, &v[3], 1);

:-)

您的方法存在問題。

  • C字符串必須以0字節結尾,換句話說'\\0'字符。 使用""會自動添加,但是您必須自己添加它,並且所有字符串函數都依賴於那里的0。

  • 你的v數組包含字符,而不是字符串, strcat包含字符串。

一個解決方案

char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);

這會將您的char數組轉換為指向C字符串的指針數組。

另外,你有責任注意, cmd[]包含足夠的空間來保存你用strcat添加的東西(在這里它)。 通常最好使用snprintf來進行字符串連接,因為它需要終止目標數組的總大小, 包括終止null,並且總是添加null,所以它更難搞亂。 原始char數組的示例:

char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);

注意:像這樣的sizeof只有當buf確實是一個數組時才會起作用,用這里的[]聲明。 同樣使用snprintf,使用相同的緩沖區作為目標和格式參數可能會產生意外的結果,所以我添加了一個新的目標緩沖區變量。

還有一個snprintf示例,僅包含原始的兩個數組,附加到cmd的當前內容的末尾:

snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);

很明顯,在這種特殊情況下, strncat(cmd, &v[3], 1)在其他答案中建議添加1個字符要好得多,但是snprintf的好處是,你可以添加printf支持的所有數據類型,而不是字符。

不要使用此:

strcat(cmd,&v[3]);

&v[3]不是指向空終止字符串的指針! 改為使用

strncat(cmd, &v[3], 1);

首先,確保變量'cmd'分配了足夠的內存。

其次,提到'v [3]'是一個有符號字節的值。 您必須使用以下對strncat(而不是strcat)的調用:

strncat(cmd,&v[3],1);

怎么樣

strcat(cmd,&v[3]);

問題是你也不使用strcat:

char *strcat (char *dest, const char *src);

因為你這樣做

char *strcat (char *dest, char src);

所以你必須聲明一個char *作為你的char。

char buf[2];

sprintf(buf,"%c", V[3]);
strcat(cmd, buf);

要么

strncat (cmd, &v[3],1);

你做不到

strcat(cmd,&v[3]);

這將使V數組從單元格3到數組的末尾,而不是只復制V [3]

我可以建議另一個解決方案

int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';

暫無
暫無

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

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