C语言新手问题

[复制链接]
查看11 | 回复4 | 2007-12-22 14:27:14 | 显示全部楼层 |阅读模式
这个answer是指针,但也仅仅是个指针,程序没有为后来的输入分配存储空间,况且还没有初始化,但是却是有值的,也就是说answer指向了一个内存地址,后来的输入会放在那里,尽管那里存放着其他变量或指令的数据,但会覆盖掉原有的正确内容,gets函数在这里所做的就是将内存中一段有效数据换成你所输入的内容,几乎肯定会出错,需要改成char answer[50];这样就有50个字节给你输入,当你输入的数据太多还是会有有效数据被覆盖。还有,字符串比较要这样写strcmp(answer,result)==0。
回复

使用道具 举报

千问 | 2007-12-22 14:27:14 | 显示全部楼层
你定义的char *answer没有为它分配内存,它的内容是一个不确定的值,所以 用gets就没有意义了.应该先加上answer=(char *)malloc(30);malloc 在中,当然分配的内存大小可以自已找个合理点的值.
回复

使用道具 举报

千问 | 2007-12-22 14:27:14 | 显示全部楼层
你有两个问题1 answer没有分配内存,可改为char answer[10]2 比较两个字符串不能用=,要用函数strcmp原型 int strcmp(char*,char*) 若相等返回0,否则返回非0你的程序可以修改如下:#include "stdio.h" #include "conio.h"#include//!!!!!!!void main() { char answer[10],*result="ok"; //!!!!!!!!!!!gets(answer);if(strcmp(answer,result))//!!!!!!!!!printf("You are a fool!"); else printf("Good!"); getch(); }
回复

使用道具 举报

千问 | 2007-12-22 14:27:14 | 显示全部楼层
因为 你定义的是指针变量( *answer,*result),而 answer和result是两个地址,你知道ok在内存中的地址吗?那只能printf("You are a fool!"); 。况且地址是电脑分配,你也无法输入啊!!
回复

使用道具 举报

千问 | 2007-12-22 14:27:14 | 显示全部楼层
你用的指针吧,把answer改下看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行