首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

puts()的迷惑解决思路

2012-02-27 
puts()的迷惑#include stdio.hchar*read(char*p,intn)intmain(void){chars[10]char*pintqpread(s,1

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个字符看下结果再说..

热点排行