指针可不可以用gets函数? 例如 char *p; gets(p); puts(p);

作者&投稿:韦伦 (若有异议请与网页底部的电邮联系)
关于gets()函数的应用~

char *p; 没有初始化指向一片可用的空间就gets(p);了,在函数体内p是随机值,gets写到这个随机指针指向的空间,当然会发生莫名其妙的错误(行为不可预料)。
可以直接把char *p;改成char p[1000];之类(长度随意,但要保证放得下gets得到的内容,比如说可以用LZ定义的MAX)。或者这样:
#include
/*...*/
char *p = malloc(1000); /*malloc参数数值为字节数,还是要保证一定放得下gets得到的内容。*/
/*...*/
system("pause");
free(p);
/*...*/
====
[原创回答团]

因为ch指向的字符串是存放在不可以更改的内存区域,更改ch指向单元的任何数据都是不允许的。所以你gets(ch)是重写ch所指单元,故出现错误。数组是可以的,因为它不是存放在不可以更改的内存区域。

用当然可以用。
但是p首先要分配空间。将指针p分配一组字符串内存地址
如下p = (char *)malloc(NUM*sizeof(char)); //C语言中
p = new char[NUM]; //C++语言中

指针可以用gets,前提是指针必须指向有效的足够大的内存地址。
char string[] = "a large enough memory for gets() to use";
char *addr = string;
gets(addr);
puts(addr);

如果仅仅是这样的话,编译没错,可是运行时会出现访问未申请的内存,从而程序崩溃掉!指针P应该指向自己申请过的内存地址,如:
char *p=(char *)malloc(1000);
gets(p);
puts(p);
或者:
char buf[1000];
char *p=buf;
gets(p);
puts(p);


几个"打针"的英语翻译
“打针”的英语表达是:injection、get a shot 一、injection 读音:英 [ɪnˈdʒekʃn] 美 [ɪnˈdʒekʃn]释义:注射,(液体)注入。语法:inject的基本意思是“注射”,指把液体通过注射器或其他仪器注入另一物体。引申可表示为“给某人灌通思想...

"打疫苗"用英语怎么说?
在国外接种疫苗时,医生可能会说 "You need to get two shots\/injections",并且打完第一针后要等待21天接种第二针。对于疫苗的副作用、免疫时间和注射疼痛感,你可以询问相应的问题。至于“打针”在英语中,可以表达为 "get\/have a shot", "get\/have a dose", "get\/have an injection" 或 "g...

get了调表针的使用方法
1.先检查下表带边上针可以进去的那个孔,如果很平的话,可以先立起表带,将调表针对准,用工具敲下调表针,目的就是使那个孔明显些;孔要明显的话就直接对准就可以了。2.放进调表器里,对准一直往后,直到针出不来,用力,OK,成功。3.裁掉的扔掉,接好需要的,放进原来的针,用工具把针敲进...

总结一下英语中“get"和”FOR"的用法
在被动语态使用get , 如我们在海滩上晒黑了 , 渐渐在正式写作中避免。但在非正式上下文中,这个结构为使其比相应被动形式be 给予其主语更为主动的角色提供了极为有用的区别。 因此,如果琼斯为了验证特殊法律条文而严重违犯了某法律,最好用以下句子来描绘Jones got arrested by the police, 但如果琼斯没有反抗警察...

javascript里的post和get的区别是什么?
表单:可以是GET,也可以是POST,这取决与的method属性值;GET请求和POST请求的区别:1.效率 GET的意思是『得』,从服务器获取数据(也可以上传数据,参数就是),效率较高 POST的意思是『给』,但可以向服务器发送数据和下载数据,效率不如GET 2.缓存 GET 请求能够被缓存,默认的请求方式也是有缓存...

接口测试get和post的区别
Post的所有操作对用户来说都是不可见的。 4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。 5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。 6、Get是Form的默认方法。

needle针是可数名词吗
是可数名词 针线, 还有指针,磁针,注射用针的意思 此外,它也可以用做动词 1.用针串过.2.取笑.3.穿行 一些有用的短语 非常机敏 as sharp as a needle 恼怒 get(have) the needle 击中要害 hit the needle 大海捞针 look for a needle in a bottle of hay 坐如针毡 on pins and needles ...

我的世界猎人游戏极限追杀怎么用指南针?
|指令\/ selectrunner| \/runner- 选择逃跑者(就是指南针指着的人)\/ getcompass | \/ compass - 给自己一个新的跟踪指南针。游戏简介:Minecraft是一款沙盒类电子游戏,中国版官方译为《我的世界》,台译《当个创世神》,开创者为马库斯·阿列克谢·泊松(Notch)。游戏现由Mojang Studios维护,隶属于...

介词at, in, to, with, of, for的用法区别
可表示原因,at一般指看到、听到或感觉到客观事物而产生某种感情、情绪、态度或行为的原因。2、in in表示使用某材料。3、to 可与位移动词连用,表示动作的运动方向,to往往与come, drive, fly, get, go, lead, march, move, return, ride, travel, walk等动词连用。to含有“向最终目标运动”的意思...

含有get的短语
get off v. 动身;免于受罚;从…下来;脱下(衣服等)get better 变得更好;康复 get to know 了解;认识 get through 通过;到达;做完;接通电话 get hold of 把握;抓住;得到 get away 离开;逃脱;出发 get from 从…处得到…get used to 习惯于…get rid 摆脱;排除;处理掉 get back...

古城区13494541156: 指针可不可以用gets函数? 例如 char *p; gets(p); puts(p); -
德莘泽菲: 用当然可以用.但是p首先要分配空间.将指针p分配一组字符串内存地址 如下p = (char *)malloc(NUM*sizeof(char)); //C语言中 p = new char[NUM]; //C++语言中

古城区13494541156: C语言高手求助char *s;gets(s);这样是对还是错, char *s;s="ABCDEF"是对还是错 -
德莘泽菲: char *s;gets(s); 上面这种写法是错误的.s定义成指针,需要有明确的指向.gets()函数是要求提供具体指针地址,从那个地址开始存储字符串,而如果简单定义char *s;s是个野指针,无法提供具体指向.可以修改 成char *s; char a[100];s=a;gets(s);这样让s指向数组a,确定地址方位.char *s;s="ABCDEF" 上面这种写法是可以的.让s指向字符串常量首地址.可以进行打印操作puts(s);但不能进行修改操作*s='a';因为常量字符串的限制. 建议你上机运行下这几句,编译都能通过.不过,执行时候,看看效果

古城区13494541156: 用指针实现字符串的连接 -
德莘泽菲: #include<stdio.h> int main(){ char a[20]={0},b[20]={0}; char*q=a,*p=b; printf("请输入第一串数字\n"); gets(a); printf("请输入第二串数字\n"); gets(b); printf("第一串数字为\n"); puts(a); printf("第二串数字为\n"); puts(b); while(*q!...

古城区13494541156: 用gets怎样输入指针数组 -
德莘泽菲: 能把你的问题描述得详细点么? 如果只是输入到字符数组里面可以这么做 int main() {char str[10];char *p=str;gets(p);printf("%s\n",p); return 0; }

古城区13494541156: 用指针输入和输出字符串,怎么报错呢? -
德莘泽菲: 先说为什么删掉就可以输出:定义 char *a的时候 你将 那个字符串的首地址赋给了 指针a 所以马上输出的话是不会出错的 那为什么加上gets(a)就不可以输出了?是因为声明指针的时候并不给指针分配存储地址 (这也是指针和数组的主要区别!) 所以当gets(a)时是无法给赋给一个只能存地址的a的

古城区13494541156: 请问指针数组可以用循环来赋值吗?用scanf(“%s”,s[i]);这样可以吗?怎样可以随时给指针数组赋值 -
德莘泽菲: 楼上的回答是错误的,你的那样就可以了,因为它本身就是指针,还取什么地址呢,但有个问题,你必须对应的给它开辟一个空间才可以,比如,char a[5];s[0] = a才可以,否则还是不行

古城区13494541156: 未初始化的字符串指针 -
德莘泽菲: 首先,你应该先明白 指针存储的是地址,你觉得"ascd"是一个地址值吗?不是吧,很明显是一个字符串,那么,你能把字符串当真地址存储在指针里吗?这肯定是不行的.所以,如果你要给指...

古城区13494541156: 怎么存储带空格的字符串 -
德莘泽菲: C语言里用gets()函数输入,可以存空格,gets()函数以回车为结束标志.如:# include <stdio.h> main() { char a[20]; gets(a); printf("%s",a); }

古城区13494541156: 字符串指针初始化后,为何仍不能使用gets()函数? -
德莘泽菲: char *ch = "abcd"; 这句说明你申请的空间的内容是不能修改的.可以改为:char ch[100];

古城区13494541156: char *s;gets(s);这样是对还是错, char *s;s="ABCDEF"是对还是错 -
德莘泽菲: 前者错误,因为指针s没有开辟空间,所以无法输入,后者是正确的,不过后面要加上分号别忘了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网