Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
对memcpy_s的未定义引用_C_Memcpy_Undefined Reference_C11_Tr24731 - Fatal编程技术网

对memcpy_s的未定义引用

对memcpy_s的未定义引用,c,memcpy,undefined-reference,c11,tr24731,C,Memcpy,Undefined Reference,C11,Tr24731,我正在尝试修复对memcpy\u s()错误的未定义引用。我已经在文件中包含了string.h,并且memcpy()函数工作正常,我还尝试了包含memory.h。我在x64 Windows 7上,使用GCC4.8.1进行编译 #include <stdlib.h> #include <stdio.h> #include <string.h> void doMemCopy(char* buf, size_t buf_size, char* in, int ch

我正在尝试修复对
memcpy\u s()
错误的未定义引用。我已经在文件中包含了
string.h
,并且
memcpy()
函数工作正常,我还尝试了包含
memory.h
。我在x64 Windows 7上,使用GCC4.8.1进行编译

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void doMemCopy(char* buf, size_t buf_size, char* in, int chr) {
    memcpy_s(buf, buf_size, in, chr);
}
#包括
#包括
#包括
空文件副本(字符*buf,大小\u t buf\u大小,字符*in,整数chr){
memcpy_s(基本尺寸、基本尺寸、英寸、厘米);
}

已在主函数中为
buf
分配了内存,该函数调用
domecpy(buf,64,in,bytes)
<代码>在中是从标准输入读取的字符串

来自cmd终端的确切错误:

对“memcpy_s”collect2.exe的未定义引用:错误:ld返回1个退出状态


我从来没用过这个,不过你需要补充一下

#define __STDC_WANT_LIB_EXT1__ 1
以前

#include <string.h>
#包括

使用
memcpy_s()

GCC 4.8不包括函数
memcpy_s
,或据我所知的任何其他边界检查函数。这些功能在ISO 9899:2011附录K中有定义,它们是可选的。在使用它们之前,您必须检查是否定义了
\uuuuuu STDC\u LIB\u EXT1\uuuu

这些功能最初是由Microsoft实现的,许多方面都反对将它们包含在标准中。我认为主要的反对意见是,函数所做的错误处理涉及线程之间共享的全局回调句柄,但它们的效率也相当低


Carlos O'Donell和Martin Sebor in可进一步阅读。

是否已分配
buf
in
?您得到的确切错误是什么?显示调用函数
buf
的上下文,该函数已在main()函数中分配,而
in
是从标准输入读取的字符串。我得到的错误是
未定义对“memcpy_s”collect2.exe的引用:错误:ld返回1退出状态
应向问题添加新信息。请将您的评论中的信息添加到您的问题中。@jhinzmann不是必需的。它与实际问题无关。它是否试图链接到错误的版本?这是否也需要
-std=c11
编译选项?否。这是针对C11的。引用上面的引用,作为所有边界检查函数,只有在实现定义了STDC_LIB_EXT1并且用户在包含string.h之前将STDC_WANT_LIB_EXT1定义为整数常量1时,memcpy_s才保证可用。你所说的定义应该在
#include
一行之前,我在
#include
之前定义了STDC\u WANT\u LIB\u EXT1\uuu1,我仍然得到同样的错误。当我尝试用
-std=c11
编译它时,我得到
警告:函数“memcpy_s”[-Wimplicit function declaration]
的隐式声明除了未定义的引用错误之外,我没有访问同一个编译器的权限,但该错误似乎不太可能与头有关,定义甚至编译,因为这是一个链接时错误,表示库中缺少它(可能是因为没有编译以支持它)。当然,除非memcpy_s()是静态内联函数或宏。