繁体   English   中英

C Readline 功能不起作用

[英]C Readline Function Not Working

我正在阅读有关 Objective-CBigNerdRanch 书,它我如何在常规 C 中将行放入stdin 。出于某种原因,应该使用readline重复输入(小错误)运行的示例代码不起作用。 它成功构建,但在输入后,如果我输入Mikey它会显示MMiikkeeyy

我得到:

(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>

重复输入 (MMiikkeeyy) 可能是调试器控制台的问题。 如果您从命令行启动程序,它应该可以正常工作。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    printf("Who is cool? ");
    char name[50];
    scanf("%s",name);
    printf("%s is cool!\n\n", name);
    return 0;
}

上面的代码做你想要的。

你的代码有两个问题

  1. 没有名为 readline 的函数。 从标准输入读取字符的函数称为 scanf。 该函数采用 2 个参数,格式类似于 %s,这意味着您要读取字符串和要存储字符的变量。
  2. 你的变量定义也有问题。 您已将其声明为名称后带有 [size] 的数组,以便您可以存储多个字符。

希望这会有所帮助,并获得良好的 c 资源,请参见此处

对我来说,在编译以include readlineinclude是不够的:

#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

我必须链接到readline

gcc readline_prog.c -o readline_prog -g -Wall -Wextra -lreadline

正如这里提到的有些人可能还需要为编译器提供额外的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM