我不喜欢的东西......如何将参数连接到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