2014-04-06 33 views
-1

我阅读的Objective-C的BigNerdRanch书,它的运行通过我如何把线到stdin经常C.出于某种原因,这就是所谓的示例代码与readline复制运行输入(小错误)不起作用。它成功地构建但考虑在其中输入后,如果我输入Mikey它显示MMiikkeeyyÇ的Readline功能不工作

我得到:

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

任何帮助深表感谢。

+1

这可能意味着'readline()'没有在''中声明。您需要导入适当的库。 –

回答

1

你不包括其中readline()声明的头文件。因此, 编译器假定函数返回int。这是在运行时 发生崩溃的原因。

如果使用GNU readline库再加入

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

你的代码。但是从你的问题来看,我认为你正在使用OS X上的Xcode编译。 OS X有一个“libedit”库,它有一个“readline wrapper”。在这种情况下,你只 包括

#include <editline/readline.h> 

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

+0

需要包含额外的头文件才能使它工作!具体来说:#include steviejay

0
#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资源看here

+0

'const char * name [50];'是错误的。你需要'char name [50];' – nos

+0

感谢没有注意到我刚刚复制了op的代码编辑 –

0

对我来说编译到inclue readline时,该include的还不够:

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

我不得不链接到readline

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

如前所述here一些可能需要提供编译器的其他路径也在。