【问题标题】:scanf not behaving properlyscanf 行为不正常
【发布时间】:2015-12-02 20:49:11
【问题描述】:

我正在尝试通过 scanf 输入 2 个数字,但 scanf 会引发分段错误。

void add_prog_1(char *host){
CLIENT *clnt;
int *result_1;
intpair add_1_arg;
int x;
int y;
clnt = clnt_create (host, ADD_PROG, ADD_VERS, "udp");
if (clnt == NULL) {
    clnt_pcreateerror (host);
    exit (1);
} else {

    printf("Connection Established Successfully");
    scanf("%d %d",&x ,&y);
    printf("Input Successfully");
    add_1_arg.a = x;
    add_1_arg.a = y;

}

程序的输出是

Connection Established Successfully
4 4 
Segmentation fault (core dumped)

请帮忙!!

【问题讨论】:

  • 您的 scanf 调用看起来不错。您确定是 scanf() 调用给出了段错误而不是代码的其他部分吗?
  • 请使用调试器解决此类问题。如果没有一个最小的完整示例,我们无法在这里为您提供帮助。
  • @BlueMoon 我猜上面代码的输出是Connection Established Successfully 4 4 Segmentation fault (core dumped) 4 4 是给定的输入
  • 看看here
  • @Michi 给定程序使用的命令行参数不是从控制台输入的。

标签: c segmentation-fault scanf


【解决方案1】:

您的问题很可能出在其他地方。 我怀疑第二个printf 的输出没有被刷新到终端,程序继续运行,直到你稍后在调用函数的某个地方崩溃。

这样修改函数并重新测试:

printf("Connection Established Successfully\n");
scanf("%d %d",&x ,&y);
printf("Input Successfully\n");
fflush(stdout);
add_1_arg.a = x;
add_1_arg.a = y;

您应该学习使用诸如gdb 之类的调试器:当程序遇到分段错误时,操作系统会转储一个名为core 的文件,您可以使用调试器加载该文件。它包含了准确指出故障发生时间的所有信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多