我做了类似......
str = strcpy(str, arg[1]);
str = strcat(str, " ");
str = strcat(str, arg[2]);
如果我有5个args ???
我该如何解决?
答案 0 :(得分:6)
写一个循环:
char str[HUGE];
strcpy(str, argv[1]);
for (int i = 2; i < argc; ++i)
{
strcat(str, " ");
strcat(str, argv[i]);
}
首先应检查argc
是否至少为1,最好使用长度限制函数strncpy
和strncat
,并跟踪每个函数的长度参数。
答案 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;
}