puts()的迷惑
#include <stdio.h>
char *read(char *p,int n);
int main(void)
{
char s[10];
char *p;
int q;
p=read(s,10);
return 0;
}
char *read(char *p,int n)
{
int m=n;
while(n--)
{p[m-n]=getchar();
printf ( "%c ",p[m-n]);}//打印1
printf ( "\n ");
puts(p);//打印2
return p;
}
这样的一个函数,用打印1语句没问题,为什么用puts()就有问题了,显示乱码?难道puts()一定要和gets()一起用吗?
[解决办法]
C里面规定字符串的结束符是 '\0 ',而你的程序里字符串数组的所有元素均为由getchar输入的字符,系统找不到 '\0 '就会认为字符串未结束,所以就有了乱码.你可以看一下乱码的前几位字符是否是正确的.
[解决办法]
read()前memset(s, 0, sizeof(s));
[解决办法]
试下看行不?
#include <stdio.h>
#include <stdlib.h>
char *read(char *p,int n);
int main(void)
{
char s[10];
char *p;
//int q;
p=read(s,10);
puts(p);
printf ( "\n ");
system( "pause " );
return 0;
}
char *read(char *p,int n)
{
//int m=n;
char *q=p;
while(n--)
{
//p[m-n]=getchar();
*p = getchar();
p++;
// printf ( "%c ",p[m-n]); //打印1
}
*p = '\0 ';
//puts(p);
//printf ( "\n ");
//puts(p);//打印2
return q;
}
[解决办法]
不对,p是数组的首地址,怎么能让p随便++呢.
只要在你的第1个程序里,在read函数里让p[9] = '\0 '就行了
[解决办法]
不对,p是数组的首地址,怎么能让p随便++呢.
_______________________________________________________________
看清楚再说..
只要在你的第1个程序里,在read函数里让p[9] = '\0 '就行了
________________________________________________________________
先运行输入10个字符看下结果再说..