微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在c中将多个数组标记合并为一个

如何解决如何在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'"}

解决方法

你有几个问题

  1. 您没有正确计算元素数量

  2. 您没有空间存储结果

  3. 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 举报,一经查实,本站将立刻删除。