[quote=引用 19 楼 qq_43898044 的回复:] [quote=引用 17 楼 六道佩恩的回复:]我感觉程序没问题,像是回车引起的,你在gets前面加个getchar试试
[quote=引用 17 楼 六道佩恩的回复:]我感觉程序没问题,像是回车引起的,你在gets前面加个getchar试试
我感觉程序没问题,像是回车引起的,你在gets前面加个getchar试试
[quote=引用 12 楼 qq_43898044 的回复:] [quote=引用 9 楼 自信男孩的回复:]楼主的问题是gets的问题,而不是申请空间的问题。 因为scanf输入的时候会将'\n'留在输入缓存里,而gets遇到'\n'时就直接返回,因此楼主 输入的内容并没有放到申请的空间里,因为gets遇到上次输入的'\n'直接返回了。 解决办法,在scanf后加一句getchar();吧。 或者用scanf("%s", xx);
[quote=引用 3 楼 qq_43898044 的回复:] [quote=引用 1 楼 通信小卒的回复:]一般函数的声明放在main的外面,改一下看看是不是这块引起的
gets(str);之前加一句getchar();
[quote=引用 9 楼 自信男孩的回复:]楼主的问题是gets的问题,而不是申请空间的问题。 因为scanf输入的时候会将'\n'留在输入缓存里,而gets遇到'\n'时就直接返回,因此楼主 输入的内容并没有放到申请的空间里,因为gets遇到上次输入的'\n'直接返回了。 解决办法,在scanf后加一句getchar();吧。 或者用scanf("%s", xx);
楼主的问题是gets的问题,而不是申请空间的问题。 因为scanf输入的时候会将'\n'留在输入缓存里,而gets遇到'\n'时就直接返回,因此楼主 输入的内容并没有放到申请的空间里,因为gets遇到上次输入的'\n'直接返回了。 解决办法,在scanf后加一句getchar();吧。 或者用scanf("%s", xx);
#include<stdio.h> #include<stdlib.h> int main() { char *_new(int n); int n; char *str; printf("请输入字节数:"); scanf("%d",&n); str =_new(10); while(getchar()!='\n'); printf("请输入字符串:\n"); gets(str); printf("字符串为:\n"); puts(str); return 0; } char *_new(int n) { char *p; p=(char *)malloc(n*sizeof(char)); return p; } 把你的程序专门跑了一下,应该scanf函数的存在,导致缓存区有数据,等gets函数检测缓存区的时候发现有数据就不用输入直接 跳过,while(getchar()!='\n');就是发缓存区所有的数据线读取释放清空的作用。
如果解决了你的问题,希望采纳
[quote=引用 1 楼 通信小卒的回复:]一般函数的声明放在main的外面,改一下看看是不是这块引起的
一般函数的声明放在main的外面,改一下看看是不是这块引起的
69,371
社区成员
243,080
社区内容
加载中
试试用AI创作助手写篇文章吧