我正在使用 snmp,requests->requestvb->val.string 函数返回一个 u_char*,我试图将其存储到 char[255] 中。
u_char newValue = *(requests->requestvb->val.string)
char myArray[255];
我尝试了几种方法将 newValue 的内容复制到 myArray 中,但一切似乎都存在段错误。我做错了什么?
我已经尝试过了
memcpy(myArray, newValue);
另一次尝试strncopy(myArray, newValue, sizeof(myArray));
我做错了什么?
最佳答案
您的 newValue
的类型为 char
,并且出于所有意图和目的,您的 myArray
的类型为 char*
.
首先,我假设您正确使用了 memcpy
,并且您传递了 3 个参数而不是 2 个,其中第三个参数与第一个参数相同您在 strncpy
中使用。
当您尝试使用 strncpy
或 memcpy
时,在尝试复制所有内容时,您超出了 newValue
中的一个字符“限制”到myArray
。
修复应该非常简单:
u_char* newValue = requests->requestvb->val.string;
完成后,这应该可以工作。当然,这是假设 myArray
的大小实际上大于或等于 255 :)
作为旁注(这应该是不言而喻的),如果您打算打印它,请确保您的 myArray
末尾有一个空终止字符。执行复制操作后没有一个,然后尝试打印是一个非常常见的错误,也可能导致段错误。
关于c++ - 如何在 C 中将 u_char* 转换为 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022003/