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

如何将C中的参数连接到字符串?,c,concatenation,C,Concatenation,我做了一些像 str = strcpy(str, arg[1]); str = strcat(str, " "); str = strcat(str, arg[2]); 如果我有5个参数呢 如何修复它???编写循环: char str[HUGE]; strcpy(str, argv[1]); for (int i = 2; i < argc; ++i) { strcat(str, " "); strcat(str, argv[i]); } 您应该首先检查argc是否至少为1,

我做了一些像

str = strcpy(str, arg[1]);
str = strcat(str, " ");
str = strcat(str, arg[2]);
如果我有5个参数呢

如何修复它???

编写循环:

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

for (int i = 2; i < argc; ++i)
{
  strcat(str, " ");
  strcat(str, argv[i]);
}
您应该首先检查argc是否至少为1,最好使用长度限制函数strncpy和strncat,并跟踪每个参数的长度。

编写一个循环:

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

for (int i = 2; i < argc; ++i)
{
  strcat(str, " ");
  strcat(str, argv[i]);
}
您应该首先检查argc是否至少为1,最好使用长度限制函数strncpy和strncat,并跟踪每个参数的长度。

您可以在arg数组上执行循环。像

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

for ( i = 2; i < arg_array_size; i++ )
{
   strcat(str, arg[i]);
   strcat(str, " ");
}
您可以在arg数组上执行循环。像

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

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

您不需要将返回值赋给str。此外,如果字符串存储在静态数组中,则它是不正确的

使用下面的构造,您可以根据需要连接

char str[MAX];

strcpy (str, "");

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

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

您不需要将返回值分配给str。此外,如果字符串存储在静态数组中,则它是不正确的

使用下面的构造,您可以根据需要连接

char str[MAX];

strcpy (str, "");

for (i=0; i<argc; i++)
{
   strcat (str, argv[i]);
   strcat (str, " ");
}
动态分配内存。以这种方式分配时,请记住在处理完字符串后释放分配的内存。

循环FTW

for(i = 1; i < argc; i++)
{
    str = strcpy(str, arg[i]);
    str = strcat(str, " ");
}
请记住,这将在末尾添加一个尾随空格。可以通过在该位置插入NUL字符将其删除。也不要忘记在str缓冲区中分配足够的空间,并放置一个终止的NUL字符。

循环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
}

希望这有帮助。

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

int i;
int needed = 1;                        // plus end of string mark

for(i = 1; i < argc; ++i) {
    needed += strlen( argv[ i ] ) + 1; // plus space
}
#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;
}

希望这能有所帮助。

如果您遇到麻烦先做第一个,最好将回路中的STRCAT倒置并移除初始STRCAT,就像kerrek的解决方案一样……如果您遇到麻烦先做第一个,最好将回路中的STRCAT倒置并移除初始STRCAT,就像kerrek的解决方案…也许接受这个答案,那么?答案左边的复选标记,右下的向上箭头数字向下箭头也许接受这个答案,然后呢?答案左侧的复选标记,上箭头数字下箭头的右下方
#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;
}