如何解决如何在c中将多个数组标记合并为一个
char* args = { "zero","one',"two"}
注意 args 不是设置大小,它可以是 1 或 100
我想创建一个新数组
char* array ={"one two"}
中间有空格。
我试过了:
char* array;
int i=1;
for(i=1; i< sizeof(args)-1 ; i++){
strcat(array,args[i]);
}
但一直出现分段错误。
这是我正在使用的代码,需要添加将我的所有参数从 1(不是零,因为 arg[0] 有一个命令)到任何大小的函数:
else if ( (args[1] != NULL) && (strchr(args[1],'=') != NULL) ) {
memcpy(aliasCommands[aliasCount],args[1],512 );
printf("Save Alias\n");
printf("Alias Added : %s\n",aliasCommands[aliasCount]);
aliasCount++;
printf("Alias Number : %d\n",aliasCount);
}
我想传递 args[1] 空间 args[2] 等等
可以这么说
args[1]={"command='ls"}
args[2]={"cd'"}
依此类推,args 可以达到 512。我想将它们全部作为一个字符串传递
aliasCommand[aliasCount] = {"command='ls cd'"}
解决方法
你有几个问题
-
您没有正确计算元素数量
-
您没有空间存储结果
-
strcat
想要一个以 null 结尾的字符串
我将使用 snprintf
而不是 strcat
以避免缓冲区溢出,例如:
#include <stdio.h>
int main(void)
{
char *args[] = {"zero","one","two"};
char str[32];
size_t len = 0;
for (size_t i = 0; i < sizeof args / sizeof *args; i++)
{
len += (size_t)snprintf(str + len,(sizeof str) - len,"%s ",args[i]);
}
// Remove the last space
str[len - 1] = '\0';
printf("<%s>\n",str);
return 0;
}
输出:
<zero one two>
,
对于初学者来说,这个声明中使用的初始化器(你忘记放置分号的地方)
char* args[] = { 'zero','one','two'};
不是字符串文字而是具有实现定义值的多字节整数字符常量。
你的意思是
char * args[] = { "zero","two" };
还有这个数组的声明(您再次使用整数字符常量而不是字符串文字)
char* array[]={'zero one two'}
没有多大意义,因为它等价于
char* array[1]={'zero one two'}
你的意思是
char *array={ "zero one two" }
您需要的是动态分配一个足够大的数组,并将数组args
中指向的字符串文字复制到数组array
中。
这是一个演示程序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char * args[] = { "zero","two" };
const size_t N = sizeof( args ) / sizeof( *args );
size_t n = 0;
for (size_t i = 0; i < N; i++) n += strlen( args[i] );
char *array = malloc( n + N );
if (array != NULL)
{
size_t n = 0;
array[0] = '\0';
for (size_t i = 0; i < N; i++)
{
if (i != 0)
{
array[n] = ' ';
array[++n] = '\0';
}
strcpy( array + n,args[i] );
n += strlen( args[i] );
}
puts( array );
}
free( array );
}
程序输出为
zero one two
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。