我有什麼:c char字符數組串聯
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
所以我想從v
添加字母來連接cmd
。
很明顯:
strcat(cmd, v[3]);
不起作用,因爲strcat
不接受v[n]
參數n = int
。
我有什麼:c char字符數組串聯
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
所以我想從v
添加字母來連接cmd
。
很明顯:
strcat(cmd, v[3]);
不起作用,因爲strcat
不接受v[n]
參數n = int
。
與方法的問題。
C字符串必須以0字節結尾,換句話說就是'\0'
字符。使用""
會自動添加,但除此之外,您必須自己添加它,並且所有字符串函數都依賴於那裏的0。
您的v數組包含字符,而不是字符串,並且strcat
需要字符串。
一個解決方案:
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
這就使你的字符數組的指針到數組到C字符串。
此外,你有責任注意,cmd[]
包含足夠的空間來容納任何你添加到它的strcat(在這裏它)。通常最好使用snprintf
來進行字符串連接,因爲它需要目標數組的總大小爲,包括終止爲null,並且總是添加null,所以很難搞定。例如與原來的字符數組:
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支持的所有數據類型,而不是字符。
首先,確保變量 'CMD' 有足夠的內存分配。
其次,對'v [3]'的提及是一個有符號字節的值。您必須使用以下調用strncat函數(不是strcat的):
strncat(cmd,&v[3],1);
也許你的意思是strncat – MOHAMED
嗯。據我所知,你想從第二個數組中添加一個字符? 所以你必須使用
strncat (cmd, &v[3], 1);
:-)
我選擇了另一種方式來做到這一點,但這也適用於廣告,非常簡單。謝謝 :) – redgiun
的問題是,你不strcat的,以及使用方法:
char *strcat (char *dest, const char *src);
,因爲你做
char *strcat (char *dest, char src);
所以你必須聲明一個char *作爲char。
做不使用這樣的:
strcat(cmd,&v[3]);
&v[3]
不是一個指向空結尾的字符串!改用
strncat(cmd, &v[3], 1);
char buf[2];
sprintf(buf,"%c", V[3]);
strcat(cmd, buf);
或
strncat (cmd, &v[3],1);
你不能
strcat(cmd,&v[3]);
這個做它將從電池3 V陣列coppy到數組的末尾,而不是複製只有V [3]
我可以建議另一個解決方案
int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';
謝謝!如果我可以保證cmd []包含足夠的空間,那麼您認爲哪一個是最快的方法? – redgiun
strncat可能是這些中最快的,但最快的是'int len = strlen(cmd); cmd [len] = v [3]; cmd [len + 1] = 0;'。注意數組索引是如何從0開始的,所以'some_cstring [strlen(some_cstring)]'總是0. – hyde
謝謝。這很有用 – redgiun