在 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/