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



我是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...nn");
    printf("---Type Help For a List of Commands----n");
    gets(inpt);
    if (strcmp(inpt, help) == 1)
    {
        help();
        goto *ptr;
    }
}
return 0;
}

你可能想复习一下基础的c。

这是比较操作,不是赋值操作。该语句泄漏内存,但没有其他影响。

malloc(255) == ptr;

对未初始化的变量进行解引用,并将其与printf()的结果代码进行比较。大多数人只是忽略了printf()的结果。然而,由于ptr是未初始化的,这将在最好的崩溃您的程序与分段错误,并可能做一些更糟的事情。

*ptr == printf("Continuing Program...nn");

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

strcmp(inpt, help)

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

goto *ptr;

刚刚修改了我认为你想做的事情,我假设你想获得帮助,然后循环并从用户那里获得另一个命令。

int prac;          
char inpt[255];    
bool quit = false;
while(!quit)
{
printf("Continuing Program...nn");
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,虽然在概念上与标签相似,但实际上它们在语言的工作方式上有很大的不同。

相关内容

  • 没有找到相关文章

最新更新