我是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,虽然在概念上与标签相似,但实际上它们在语言的工作方式上有很大的不同。