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