我不喜歡的東西......如何將參數連接到C中的字符串?
str = strcpy(str, arg[1]);
str = strcat(str, " ");
str = strcat(str, arg[2]);
如果我有5個ARGS ???
我該如何解決?
我不喜歡的東西......如何將參數連接到C中的字符串?
str = strcpy(str, arg[1]);
str = strcat(str, " ");
str = strcat(str, arg[2]);
如果我有5個ARGS ???
我該如何解決?
寫一個循環:
char str[HUGE];
strcpy(str, argv[1]);
for (int i = 2; i < argc; ++i)
{
strcat(str, " ");
strcat(str, argv[i]);
}
你應該先檢查argc
至少爲1,並且最好能夠使用lenght限制功能strncpy
和strncat
代替,並跟蹤每個的長度論據。
您可以通過arg
陣列進行循環。類似於
strcpy(str, arg[1]);
strcat(str, " ");
for (i = 2; i < arg_array_size; i++)
{
strcat(str, arg[i]);
strcat(str, " ");
}
如果你想要做第一個前面的麻煩,最好是在循環中獲得反轉的strcats,刪除最初的strcatr,就像在克雷克的解決方案中一樣...... – fvu
您不需要將返回值指定爲str
。另外如果你的字符串存儲在一個靜態數組中,那麼它是不正確的。
使用下面的構造,你可以連接你想要的。
char str[MAX];
strcpy (str, "");
for (i=0; i<argc; i++)
{
strcat (str, argv[i]);
strcat (str, " ");
}
這裏argc
保存了最大元素的數量。請注意,MAX
應該足夠大以容納所有連接的字符串。你也可以做
char *str;
str = malloc (sizeof (char) * MAX);
動態地分配內存。當以這種方式分配時,請記住在完成字符串處理後釋放分配的內存。
循環FTW
for(i = 1; i < argc; i++)
{
str = strcpy(str, arg[i]);
str = strcat(str, " ");
}
請記住,這將在結尾處添加一個尾隨空格。您可以通過在該位置插入NUL字符來將其刪除。另外不要忘記在str緩衝區中分配足夠的空間,並且要放置一個終止的NUL字符。
您需要首先檢查所需存儲的長度。如果你有各種參數,正確的答案是使用循環。
int i;
int needed = 1; // plus end of string mark
for(i = 1; i < argc; ++i) {
needed += strlen(argv[ i ]) + 1; // plus space
}
然後,你需要保留的內存所需要的量,並使用另一個循環,在連接字符串:
char * storage = (char *) malloc(sizeof(char) * needed);
strcpy(storage, argv[ 1 ]);
for(i = 2; i < argc; ++i) {
strcat(storage, " ");
strcat(storage, argv[ i ]);
}
最後,使用空間和自由吧。
printf("%s\n", storage);
free(storage);
希望這會有所幫助。
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
int i;
int len = 0;
char *str = "";
for(i=1; i<argc; i++)
{
len += strlen(argv[i]) + 1;
}
str = (char *)malloc(sizeof(char) * len);
for(i=1; i<argc; i++)
{
strcat(str, argv[i]);
strcat(str, " ");
}
printf("str = [%s]\n", cmds);
return 0;
}
很好的解決方案..謝謝 – user123456
也許接受這個答案吧? (答案左邊的複選標記,在「向上箭頭號向下箭頭」的右邊) – Kaos