c - C中的无符号字符数组串联

标签 c arrays string

在 C 中连接无符号字符数组的最佳方法是什么?此外,有没有办法将 unsigned char 数组与 char 数组连接起来?其中 2 个 unsigned char 数组实际上只是字符串,但为简单起见,我将它们视为 unsigned char 数组。

要求很复杂:有一个函数需要 1(一个)unsigned char 数组。那个 unsigned char 数组实际上是 4 个变量连接起来组成那个 1 unsigned char 数组。更复杂的是,第一个 unsigned char 数组实际上只是一个可变长度的字符串,但它的最大长度是 60(即有时它的长度 = 15,其他时候 = 60)。

someFunctionAssignsFirst(unsigned char *first) 
{
   //it could be 15 or 60 chars long.
   ...
}

unsigned char first[60] = //someFunctionAssignsFirst() //This is a string i.e. "variable size string max size 60"
unsigned char second[8] = "always8."; //This is a string i.e. "01234567"
unsigned char third[32] = "always32"; //This is a cryptographic key
unsigned char fourth[32] = "always32"; //This is a cryptographic key

我将如何获得:

unsigned char allstrings[sizeof(first)+sizeof(second)+sizeof(third)+sizeof(fourth)] = //all strings combined

?

我尝试了一些 for 循环,但可变长度 first 破坏了连接,我确信必须有更好的方法。

完全披露:我不是专家,我不一定喜欢 C。另外根据要求,不允许使用 C++ 或任何其他语言。


这就是我试图做的,并且(为了澄清)我没有在末尾得到一个空字符,所以它不是一个真正的字符串。

unsigned char *first = "this is a sample string, human readable";
unsigned char *second = "12345678" //always a number
//unsigned char third -> I have the value from before and it's a key
//unsigned char fourth -> I have the value from before and it's a key
unsigned char allstrings[sizeof(first) + sizeof(second) + sizeof(third) + sizeof(fourth)];
    int counter = 0;
    for (int i = 0; i <= sizeof(first); i++)    
    {
        allstrings[counter] = first[i];
        counter++;
    }
    for (int i = 0; i <= sizeof(second); i++)       
    {
        allstrings[counter] = second[i];
        counter++;
    }
    for (int i = 0; i <= sizeof(third); i++)
    {
        allstrings[counter] = third[i];
        counter++;
    }
    for (int i = 0; i <= sizeof(fourth); i++)
    {
        allstrings[counter] = fourth[i];
        counter++;
    }

在我上面的例子中,allstrings 变量除了“可读”之外没有得到任何东西。

最佳答案

您需要使用 strcpy 复制第一部分,这是一个字符串,然后使用 memcpy 复制其他 3 个部分,它们不是字符串而是 char 数组。

请注意,结果不是字符串而是 char 数组,即它不是空终止的。

unsigned char allstrings[strlen(first)+sizeof(second)+sizeof(third)+sizeof(fourth)];
strcpy(allstrings,first);
memcpy(allstrings+strlen(first),second,sizeof(second));
memcpy(allstrings+strlen(first)+sizeof(second),third,sizeof(third));
memcpy(allstrings+strlen(first)+sizeof(second)+sizeof(third),fourth,sizeof(fourth));

关于c - C中的无符号字符数组串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472286/

相关文章:

将结果从 random() 转换为 int 导致 GCC 说 "warning: implicit function definition"。为什么?

c++ - 将 vector<fooType> foo[num] 移植到 Windows(无 C99)

c - 在 2d 数组 3x3 幻方中查找重复值

c++ - 与部分阵列作斗争

C:给定已知的地址和类型,如何打印其中存储的值?

java - 不满意链接错误 : no libhello in java. library.path

c - C 链表或二叉树中的 argc/argv

Javascript:为什么数组切片方法可以将节点列表或参数转换为数组?

ios - 从 UITextField 中的第一个单词中删除前导空格

string - 如何找到两个单词的共同字母?