我正在阅读关于 Objective-C 的 BigNerdRanch 书,它让我了解如何在常规 C 中将行输入到 stdin
中。出于某种原因,示例代码应该使用 readline 运行,但复制输入(小错误)不起作用。它构建成功,但在接受输入后,如果我输入 Mikey
它会显示 MMiikkeyeyy
,
我得到:
(lldb) IMPLICIT DECLARATION OF FUNCTION READLINE IS Thread1:EXC_BAD_ACCESS(code=1,address=0x20000)
代码:
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("Who is cool? ");
const char *name = readline(NULL);
printf("%s is cool!\n\n", name);
return 0;
}
非常感谢任何帮助。
最佳答案
您没有包含声明 readline()
的头文件。因此
编译器假定该函数返回int
。这就是事故发生的原因
运行时。
如果您使用 GNU readline 库,则添加
#include <readline/readline.h>
#include <readline/history.h>
到你的代码。但从你的问题来看,我假设你正在 OS X 上使用 Xcode 进行编译。 OS X 有一个“libedit”库,其中有一个“readline 包装器”。在这种情况下你只需 包括
#include <editline/readline.h>
重复输入(MMiikkeyyy)可能是调试器控制台的问题。 如果您从命令行启动程序,它应该可以正常工作。
关于C Readline 函数不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22896418/