字符数组的地址改怎样传啊?
设计一个函数,可以在n个字符后,后第一个空格,制表,换行符,停止读取;
为什么我下面的程序得不到想要的结果?
# include <stdio.h>
# include <ctype.h>
# define LEN 100
char * fake_scanf (void);
int main (void)
{
puts (fake_scanf ());
return 0;
}
char * fake_scanf (void)
{
char * pt;
char ch[LEN];
int ct = 0;
ch[ct] = getchar ();
while (!isspace(ch[ct]) && ct<LEN)
{
ch[++ct] = getchar ();
}
ch[ct] = '\0';
pt = ch;
return pt;
}
#include <stdio.h>
#include <ctype.h>
#include <malloc.h>//新加
#include <string.h>//新加
# define LEN 100
char * fake_scanf (void);
int main (void)
{
char *pt;//新加目的是为了能够释放分配的内存,当然这里不释放也暂时也不会有什么问题。
pt=fake_scanf ();//指向这个函数返回的地址
puts (pt);//输出指向内存的内容。
free(pt);
return 0;
}
char * fake_scanf (void)
{
char * pt;
char ch[LEN];//局部变量,函数结束后即失效。
pt = (char *)malloc(LEN);//新加,分配内存。
int ct = 0;
ch[ct] = getchar ();
while (!isspace(ch[ct]) && ct<LEN)
{
ch[++ct] = getchar ();
}
ch[ct] = '\0';
strcpy(pt, ch);//因函数结束后会失效,所以要把局部变量拷贝到分配的内存中,这样返回的pt才是有内容的。
return pt;
}