C 输出流……
网上见到一道问题:(注:不是讨论这个程序 的实现 )
为什么:
当b指向的字符串短于a时,"the world is mad "无法显示
是不是和输出流文件stdout有关??
#include <stdio.h>
void copy(char *a,char *b)
{
int i=0;
while((*b=*a)!='\0')
{
a++;
b++;
}
}
void main()
{
char *a="abcdefg";
char *b="hij";
copy(a,b);
printf("The World Is Mad!\n");
printf("The World Is Mad!\n");
fflush(stdout);
printf("%s\n",b);
getch();
}
[ 本帖最后由 iptton 于 2006-6-17 23:12 编辑 ] 楼主似乎有笔误! 明白意思即可……
改了下……
#include<stdio.h>
void copy(char const *a,char *b)
{
while((*b=*a)!='\0')
{
a++;
b++;
}
}
int main()
{
char *a="abcdefg";
char *b="hijklmnop";
copy(a,b);
printf("the world is mad!\n");
fflush(stdout);
printf("%s\n",b);
return 0;
}
这样写,可以编译通过,但运行时出现 Segmentation fault错误。
错误原因,我查了一下,应该是main里声明char *a,*b;的问题。
我们知道
char a="abcdefg";//在栈上开辟20个内存空间,并给其赋初值
char *a="abcdefg";//静态存储区,常量
char *a=(char*)malloc(20);//在堆上开辟20个内存空间。
所以, 上面的错误应该是我们声明char *a="abcdefg";char *b="hijklmnop";是一个常量。
修改一下main程序如下:
int main()
{
char a="abcdefg";
char b="hijklmnop";
//下面同...
}
这样是可以编译通过并可以正常运行的。
由于我们在copy里改变是的*b指针所指的东西,所以可以把a声明为char *a="";
即main变为:
int main()
{
char *a="abcdefg";
char b="hijklmnop";
//......
}
[ 本帖最后由 hjack 于 2006-6-22 01:09 编辑 ] 所以我觉得不是与输出流有关。
页:
[1]