c语言关于malloc问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 07:32:54
我想用malloc申请10个字符空间,然后读入10个字符后在倒序输出,代码如下,但是我用c++调试,我每次都只能读入5个字母,然后输出,我很纳闷,请高手指点:#include "stdio.h"
#include "stdlib.h" /*包含malloc的头文件*/
#define NULL 0 /*宏定义,用NULL代替0*/
void main()
{
char *p=NULL; /*定义一个指向char型的指针,并赋值为空,不指向任何空间*/
int a=0;
p=(char *)malloc(sizeof(char)*10);
if(p==0) /*如果申请不到,则返回0*/
printf("申请失败");
for(a=0;a<10;a++) /*因为是10个空间,所以要小于10而不是11*/
{scanf("%c",p++);}
p-=1; /*读入十个字母*/
for(a=0;a<10;a++) /*经过上面的自加后p变到了p+10,所以要减掉1*/
printf("%c ",*(p--));
}

这是关于缓冲的一个经典问题。
你每次输入一个字符都要输入一个回车吧,这个回车也被当作字符输入了,所以你自能输入五个字符,并且在打印的时候都有一个回车换行(没注意么?)?
把for循环输入的部分改掉,使用getchar(),另外使用一个getchar读出缓冲的回车。还有一些建议,请楼主看注释。
#include <stdio.h> /*标准库的头文件,使用尖括号*/
#include <stdlib.h>
#include <malloc.h>/*包含malloc的头文件*/
// #define NULL 0 /*头文件中已经定义,去掉,否则编译器会提示重定义*/
void main()
{
char *p=NULL;
int a=0;
p=(char *)malloc(sizeof(char)*10);
if(p==0)
printf("申请失败");
for(a=0;a<10;a++)
{
*p++ = getchar(); /*读入字符*/
getchar(); /*去掉缓冲的回车*/
}
p-=1;
for(a=0;a<10;a++)
printf("%c ",*(p--));
}

另外,你在程序中改变了p的指向,这一点是不推荐的,因为申请的内存是要free的,最好不要改变p的指向,

你是不是每输入一个字符就回车?这样的话回车也会作为一个输入的字符来处理,所以你看见只有5个字符;其实你可以注意一下回车'\n'也作为一个字符输出了。

你可以输入完10个字符后再回车看看就行了