繁体   English   中英

我scanf(%s,lastName);时遇到分段错误。 (内部代码)

[英]I'm hitting a segmentation error when I scanf(%s,lastName); (body code inside)

编辑:即将尝试正确利用我的字符... [didnt work =(]

编辑:已解决(我无法再回答自己的问题7个小时...)

感谢您的评论Brian,那只是在顶部声明的常量。(它= 20)。

事实证明发生了错误,因为我在输入名称后忘记添加下一行。

现在正在工作= D

:ENDEDIT(大声笑)

我在下面编写了我的代码,基本上,我输入了应该找到的名字

约翰

然后我输入姓氏...

洛克

当我在“ Locke”中输入它时,就会遇到此错误,我觉得这可能是scanf,我应该使用更好的替代方法?

int findPatron(struct Library *lib,struct Patron **p)
{
    int i;
    char firstName[NAME_LENGTH], lastName[NAME_LENGTH];
    printf("\nPlease enter the patron's first name: ");
    scanf("%s",firstName);
    printf("\nPlease enter the patron's last name:  "); //this line prints...
    scanf("%s",lastName);  //SEGMENTATION ERROR happens here I'm pretty sure.
    printf("deerrrr");  //this line never prints
     for(i = 0; i<lib->totalPatrons;i++)
    {
            printf("checking %s %s to %s %s",lib->patrons[i].name.first,lib->patrons[i].name.last,firstName,lastName);
            if((strcmp(lib->patrons[i].name.first, firstName) == 0) && (strcmp(lib->patrons[i].name.last, lastName) == 0))
            {
                    **p = lib->patrons[i];
                    return 0;
                    break;
            }
    }

    return 1;  //No Match!
}

您在scanf()语句之后遇到了分段错误。

如果删除printf("deerrrr");之后的所有内容printf("deerrrr"); 并在输出中添加\\n ,以便刷新缓冲区,您会发现它一切正常(假设您输入的示例名称为NAME_LENGTH至少为6 )。

编程的一部分是知道如何隔离和调试问题。

您的问题出在您的循环和lib结构上-您在取消引用本不应该的东西。

SEGMENTATION ERROR发生在这里,我很确定此行永远不会打印

C的printf被缓冲,并且仅通过显式调用fflush或阻止动作(例如scanf,也由AFAIK刷新stdout)来刷新,因此错误可能在其他地方发生。 学习使用调试器,这是调试C程序的正确方法。

暂无
暂无

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

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