我是C的新手,这个分段错误的东西正在扼杀我

时间:2013-04-08 02:30:32

标签: c pointers memory segmentation-fault malloc

我是c的新手,我正在努力上网,吸收资源以帮助学习。

我开始使用简单的命令提示符类型处理,甚至这给我带来了困难!我正在尽我所能学习指针,但这个想法对我来说很难掌握,所以这里的代码给了我麻烦。我希望这个麻烦的代码的答案将有助于启发我的指针语法。

#include <stdio.h>
#include <stdlib.h>
#include "login.h"
#include "help.h"
#include <malloc.h>

main()
{
if(login())                /* Login runs fine. After the imported */ 
{                          /*login code runs, it takes me to the main screen */
    int prac;          /* (printf("Type help for a list of commands")) i input*/
    char inpt[255];    /* help, the imported help screen runs,then the core 
    int *ptr;          /*dumps. oh and i know the malloc() syntax is wront*/
    malloc(255) == ptr;   /*that's just the last thing i tried before i posted*/

    *ptr == printf("Continuing Program...\n\n");
    printf("---Type Help For a List of Commands----\n");
    gets(inpt);
    if (strcmp(inpt, help) == 1)
    {
        help();
        goto *ptr;
    }
}
return 0;
}

2 个答案:

答案 0 :(得分:4)

您可能想要查看基本的C。

这是比较,而非作业。该声明泄漏了内存但没有其他影响。

malloc(255) == ptr;

取消引用未初始化的变量,并将其与printf()的结果代码进行比较。大多数人只是忽略了printf()的结果。但是,由于ptr未初始化,因此最多会使程序崩溃并导致分段错误,并且可能会更糟糕。

*ptr == printf("Continuing Program...\n\n");

将字符串与函数进行比较。这可能不会在大多数系统上崩溃,但无论如何都是错误的。

strcmp(inpt, help)

这是无稽之谈,不应该编译。您只能goto一个标签,*ptr不是标签。

goto *ptr;

答案 1 :(得分:1)

刚刚修改为我想你想要的,我假设你想得到帮助,然后循环并从用户那里得到另一个命令。

int prac;          
char inpt[255];    
bool quit = false;
while(!quit)
{
printf("Continuing Program...\n\n");
printf("---Type Help For a List of Commands----\n");
gets(inpt);
if (strcmp(inpt, "help") == 0)
{
    help();     
}
if (strcmp(inpt, "quit") == 0)
{
    quit = true;
}

}

指针不与goto一起使用,而在概念上与标签类似,实际上它们在语言的工作方式上有很大不同。