工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1567|回复: 4

C 输出流……

[复制链接]
发表于 2006-6-17 21:42 | 显示全部楼层 |阅读模式
网上见到一道问题:

(注:不是讨论这个程序 的实现 )

为什么:
当b指向的字符串短于a时,"the world is mad "无法显示  

是不是和输出流文件stdout有关??

  1. #include <stdio.h>
  2. void copy(char *a,char *b)
  3. {
  4.     int i=0;
  5.     while((*b=*a)!='\0')
  6.     {
  7.         a++;
  8.         b++;
  9.     }
  10. }
  11. void main()
  12. {

  13.     char *a="abcdefg";
  14.     char *b="hij";
  15.     copy(a,b);
  16.     printf("The World Is Mad!\n");
  17.     printf("The World Is Mad!\n");
  18.     fflush(stdout);
  19.     printf("%s\n",b);
  20.     getch();
  21. }
复制代码

[ 本帖最后由 iptton 于 2006-6-17 23:12 编辑 ]
发表于 2006-6-17 22:11 | 显示全部楼层
楼主似乎有笔误!
回复

使用道具 举报

 楼主| 发表于 2006-6-17 23:06 | 显示全部楼层
明白意思即可……

改了下……
回复

使用道具 举报

发表于 2006-6-22 01:07 | 显示全部楼层

  1. #include<stdio.h>
  2. void copy(char const *a,char *b)
  3. {
  4.   while((*b=*a)!='\0')
  5.   {
  6.     a++;
  7.     b++;
  8.   }
  9. }

  10. int main()
  11. {
  12.   char *a="abcdefg";
  13.   char *b="hijklmnop";
  14.   copy(a,b);
  15.   printf("the world is mad!\n");
  16.   fflush(stdout);
  17.   printf("%s\n",b);
  18.   return 0;
  19. }
复制代码


这样写,可以编译通过,但运行时出现 Segmentation fault错误。

错误原因,我查了一下,应该是main里声明char *a,*b;的问题。
我们知道

  1. char a[20]="abcdefg";//在栈上开辟20个内存空间,并给其赋初值
  2. char *a="abcdefg";//静态存储区,常量
  3. char *a=(char*)malloc(20);//在堆上开辟20个内存空间。
复制代码


所以, 上面的错误应该是我们声明char *a="abcdefg";char *b="hijklmnop";是一个常量。

修改一下main程序如下:

  1. int main()
  2. {
  3.   char a[20]="abcdefg";
  4.   char b[20]="hijklmnop";
  5.   //下面同...
  6. }
复制代码

这样是可以编译通过并可以正常运行的。

由于我们在copy里改变是的*b指针所指的东西,所以可以把a声明为char *a="";
即main变为:

  1. int main()
  2. {
  3.   char *a="abcdefg";
  4.   char b[20]="hijklmnop";
  5.   //......
  6. }
复制代码

[ 本帖最后由 hjack 于 2006-6-22 01:09 编辑 ]
回复

使用道具 举报

发表于 2006-6-22 14:46 | 显示全部楼层
所以我觉得不是与输出流有关。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 04:26

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表