当前位置: 代码迷 >> C语言 >> free 求解!
  详细解决方案

free 求解!

热度:639   发布时间:2007-10-23 12:17:04.0
free 求解!

刚参加完alcatel-lucent的笔试,有2个题不会请大家指点一下!
1
main()
{
char * str =(char *)malloc(sizeof(100));
strcpy(str, "hello");
free(str);
if(str != Null)
{
strcpy(str,"world");
printf(str);
}
}
这里面那行出错了,原因是什么?还有printf里面的参数怎么直接是个指针,连个格式都没有?

2
main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d%d%d",a,b,c);
}
如果输出是123456789,那输入值是什么?

搜索更多相关的解决方案: free  求解  

----------------解决方案--------------------------------------------------------
第一个程序中如果把“Null”改为NULL,并且在开头加入“#include <stdlib.h>”就可以正常运行的
第二个程序输入“123 456 789”的话,输出就为“123456789”,^_^,原来如此简单。

[此贴子已经被作者于2007-10-23 13:04:30编辑过]


----------------解决方案--------------------------------------------------------

我说说:1应该是这样的红色有错(你的)
#include<stdio.h>
#include<malloc.h>
#include<string.h>

void main()
{
char *str =(char *)malloc(sizeof(100));
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str,"world");
printf("%s",str);
}
}
free是释放str,然后在检查如个没有释放的话就在付值,再打印
第二个:主要是考虑int 的取值范围看是16位,还是32位,然后输入a,b,c(正整数)再打印


----------------解决方案--------------------------------------------------------
以下是引用Cking在2007-10-23 12:17:04的发言:

刚参加完alcatel-lucent的笔试,有2个题不会请大家指点一下!
1
main()
{
char * str =(char *)malloc(sizeof(100));
strcpy(str, "hello");
free(str);
if(str != Null)
{
strcpy(str,"world");
printf(str);
}
}
这里面那行出错了,原因是什么?还有printf里面的参数怎么直接是个指针,连个格式都没有?
虽然free把空间释放了,但首地址为NULL.然后将字符串复制过去.
printf() 之所以这样做,是因为str就是一个字符串,要知道和printf("hdsdsfds");
是一样的道理.格式也是一个字符串,不是吗,它按原样输出.
2

main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d%d%d",a,b,c);
}
如果输出是123456789,那输入值是什么?
好多种啊 12 345 6789 或者123 456 789 ...(只要不要超过范围就行)


----------------解决方案--------------------------------------------------------

我的加了还是不能
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>

void main()
{
char *str =(char *)malloc(sizeof(100));
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str,"world");
printf("%s",str);
}
}


----------------解决方案--------------------------------------------------------
nuciewth
说说为什么?我上面的,VC6.0

----------------解决方案--------------------------------------------------------

我的错误是:



----------------解决方案--------------------------------------------------------

我相信有的编译器一定可以通过.
我前面有个说错了,它的地址应该还是保持原样的.只是没有空间.
从理论上说,在这里,前面已经在空间给释放了,那下面的strcpy还怎么做.
if(str != NULL)
{
strcpy(str,"world");
printf("%s",str);
}


----------------解决方案--------------------------------------------------------

谢谢了哦!


----------------解决方案--------------------------------------------------------

谢谢大家!
那第1个是strcpy(str,"world");错了,是因为没有空间了?
那第2个,没有说多少位机。


----------------解决方案--------------------------------------------------------