Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++/Arduino:未签名字符上的strcpy()、strncpy()和memcpy()无效_C++_Arduino_Strcpy - Fatal编程技术网

C++ C++/Arduino:未签名字符上的strcpy()、strncpy()和memcpy()无效

C++ C++/Arduino:未签名字符上的strcpy()、strncpy()和memcpy()无效,c++,arduino,strcpy,C++,Arduino,Strcpy,我试图在Arduino上实现和AES-256(Adafruit Feather M0,适用于任何其他使用SAMD21处理器的人!)。加密和解密正在工作,但我无法“保存”加密值。我相信该示例会将字符数组的指针传递到void encrypt(),但当使用或将本地字符数组中的值复制到我的循环()中的值时,该值实际上不会被复制 请注意,挂起只发生在void encrypt()方法中,我想知道这是否是由于encode\u base64行造成的,示例代码将数据转换为无符号字符*。我已经能够在void dec

我试图在Arduino上实现和AES-256(Adafruit Feather M0,适用于任何其他使用SAMD21处理器的人!)。加密和解密正在工作,但我无法“保存”加密值。我相信该示例会将字符数组的指针传递到
void encrypt()
,但当使用或将本地字符数组中的值复制到我的
循环()
中的值时,该值实际上不会被复制

请注意,挂起只发生在
void encrypt()
方法中,我想知道这是否是由于
encode\u base64
行造成的,示例代码将数据转换为
无符号字符*
。我已经能够在
void decrypt()
中成功地使用
strcpy
strncpy
memcpy
,所以我所能想到的就是它是无符号字符类型

虽然根据标准库,字符最终被视为无符号字符,但我假设
strcpy
函数是标准字符串库的一部分,而不是Arduino的特殊功能

我对C/C++非常陌生,还远不是专家。我不太清楚如何避开这个问题,所以我希望有人能给我指出正确的方向

Code(我在每个的顶部都包含了指向库的链接#include


我没有运行代码,但一般来说,它与M0“挂起”,并且在我的经验中都与内存有关

这两条线:

// strncpy(output, encoded, strlen((char*)encoded)); - Hangs
// memcpy(output, encoded, strlen((char*)encoded)); - Hangs

也许真正失败的是
strlen
。可能
encoded
不是以NULL结尾的?你能试试实际长度吗?(例如,
memcpy(output,encoded,encoded_length);

您似乎忘记了有关
char
字符串的一件非常重要的事情:它们实际上被称为以空结尾的字节字符串。这个空结束的东西是使所有字符串函数工作的原因,因为它们寻找null终止符来知道结束。FYI,<代码>字节解密[FLUT] ——即使在完全的C++实现中,这也是一个坏主意。这不是标准;使用向量。同样,对于
字节加密[长度]
字符编码[加密大小]。另外,其中一个,
加密的
,可能大小有误。base64编码的大小至少为输入数据的4/3。@微控制器上的动态内存分配是谁?也不一定是最好的主意。。。承认,VLA,无论是否扩展,都可能带来类似的问题…
memcpy
肯定不是您的问题-它接受任何内容(
void*
),并复制您定义的任意多个字节,无论内容是什么。如果您复制的字节太少或太多,这是由于给出了错误的数字…感谢到目前为止的回复@我已经尝试添加“\0”的某个程序员在pos 0或加密的\u length-1上没有效果。
AES128-CBC Test :: Starting...
Plaintext input 1234567890ABCDEF1234567890ABCDEF
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

void encrypt :: Encrypted: pJUX0k/h/63Jywlyvn7vTMa9NdJF9Mz6JOB1T1gDMq/eQVoPjf/UYv+9SuzV8LQa
RETURNED Encrypted Value: L
void decrypt :: Decrypted: 1234567890ABCDEF1234567890ABCDEF
RETURNED Decrypted Value: 1234567890ABCDEF1234567890ABCDEF
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// strncpy(output, encoded, strlen((char*)encoded)); - Hangs
// memcpy(output, encoded, strlen((char*)encoded)); - Hangs