在我的C项目中,我有4-5个文件。首先,我通过在include部分直接包含源文件来测试它们。我用了代码块,我的程序运行得非常好。
但当我尝试使用Cmake构建项目时,问题来了。我将项目的生成器指定为CCD_ 1;Use default native compiler
";。配置和生成完成。
当我使用命令mingw32-make
运行时,我得到错误
error: too few arguments to function 'strnlen'
int len=strnlen(buf);
我已包含字符串。h仍然存在错误。当我直接在代码块中运行时,这些错误从未出现过。我尝试将编译器更改为代码块文件夹中的编译器。没有用。有什么建议吗,比如我应该让哪个编译器工作?Idk,其中代码块默认编译器位置为.
这与cmake或代码块无关。您的代码错误。strnlen
需要两个参数。之前编译过的代码(如果你运行它的话可能会崩溃(,只是因为在C中你可以做一些愚蠢的事情,比如使用一个从未声明过的函数;有益的";(不是!(为您声明函数。
因此,在进行编译的代码中,编译器";有益的";添加了一个隐式声明,如下所示:
int strnlen(...);
// in C this means exactly the same as
int strnlen(); // a function returning int and taking any number of arguments (!)
问题是,这不是这个函数的正确定义,程序有未定义的行为,可能会崩溃,或者它看起来可以工作,并在你最意想不到的时候崩溃(通常是在演示期间,或者如果这是家庭作业,它对你的教授不起作用(。
您需要弄清楚该特定函数要使用什么标头才能可用。在Linux和Windows上,它将是string.h
,但在Windows上并不总是存在(例如,一些编译器可能不会在其头文件或运行库中提供该函数(。