如何将参数连接到C中的字符串?

时间:2011-08-24 10:48:21

标签: c concatenation

我做了类似......

str = strcpy(str, arg[1]);
str = strcat(str, " ");
str = strcat(str, arg[2]);

如果我有5个args ???

我该如何解决?

6 个答案:

答案 0 :(得分:6)

写一个循环:

char str[HUGE];
strcpy(str, argv[1]);

for (int i = 2; i < argc; ++i)
{
  strcat(str, " ");
  strcat(str, argv[i]);
}

首先应检查argc是否至少为1,最好使用长度限制函数strncpystrncat,并跟踪每个函数的长度参数。

答案 1 :(得分:1)

循环FTW

for(i = 1; i < argc; i++)
{
    str = strcpy(str, arg[i]);
    str = strcat(str, " ");
}

请记住,这会在末尾添加一个尾随空格。您可以通过在该位置插入NUL字符来删除它。另外,不要忘记在str缓冲区中分配足够的空间,并放置一个终止的NUL字符。

答案 2 :(得分:1)

您需要首先检查所需存储的长度。如果您有各种参数,那么正确的答案是使用循环。

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 );

希望这有帮助。

答案 3 :(得分:0)

您可以对arg数组进行循环。喜欢

strcpy(str, arg[1]);
strcat(str, " ");

for ( i = 2; i < arg_array_size; i++ )
{
   strcat(str, arg[i]);
   strcat(str, " ");
}

答案 4 :(得分:0)

您无需将返回值分配给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);

动态分配内存。以这种方式分配时,请记住在使用完字符串后释放已分配的内存。

答案 5 :(得分:0)

#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;
}