Bla*_*ary 1 c string concatenation
我正在处理一个输入字符串,它由一个进程名称组成,后跟任意数量的参数.
我需要一个字符串中的进程名称以及所有参数.我以为我可以在循环中使用strcat,以便循环遍历所有args并且每次将arg附加到字符串,但是我遇到了一个问题,即获取一个空的字符串来开始循环.
任何人都可以帮我解决一些基本代码吗?
谢谢.
编辑:为了清楚起见,我发布了我的代码.迈克的帖子最接近我现在的帖子:
char * temp;
strcpy(temp,"");
for (i = 4; i < argc-1; i++) // last arg is null, so we need argc-1
{
strcat(temp,argv[i]);
strcat(temp," ");
}
Run Code Online (Sandbox Code Playgroud)
暂时忽略我的for循环中的4(魔术数字,我知道.)我正在使用此代码获得段错误.是因为我的字符串分配?我认为是这种情况,因此我问了如何组合字符串的问题.
假设你的输入字符串是一个char指针数组,暗示称为argv长度argc.
我们首先需要确定输出需要多少空间:
int length = 0;
for (int i = 0; i < argc; ++i)
length += strlen(argv[i]);
Run Code Online (Sandbox Code Playgroud)
然后我们分配它,char为'\0'终结器添加一个额外的:
char *output = (char*)malloc(length + 1);
Run Code Online (Sandbox Code Playgroud)
最后,连接:
char *dest = output;
for (int i = 0; i < argc; ++i) {
char *src = argv[i];
while (*src)
*dest++ = *src++;
}
*dest = '\0';
Run Code Online (Sandbox Code Playgroud)
请注意,我不在strcat这里使用.原因在于,这为我们建立了Schlemiel the Painter的算法:对于每次迭代,将扫描整个输出字符串以找到其结束,从而产生二次运行时间.
完成后不要忘记释放输出字符串:
free(output);
Run Code Online (Sandbox Code Playgroud)
我有点累了所以我可能会在这里忽略一些东西.使用标准库函数的更好的解决方案是受欢迎的.如果strcat返回指向终结器字节的指针会很方便dest,但是唉.