首页 > 试题广场 >

下列说法正确的是( &nbs...

[单选题]
下列说法正确的是(      )
#include "stdio.h"
#include "string.h"

void fun( char *s)
{ 
char t[7];
s=t;
strcpy(s, "example");
}

int  main()
{ 
char *s;

fun(s);
printf("%s",s);

return 0;
}


  • 输出结果为"example"
  • 输出结果为"烫烫烫烫"
  • 程序编译时出现错误
  • 程序运行时出现错误
主函数中指针s没初始化,也就是说既没给地址值也没分配内存。虽然名义上s是个指针,但是系统没有给它分配任何内存,而且它甚至连做fun入参的资格都没有:它没值。fun()都调不起来,到这一步程序就已经炸了,都不用考虑s是否可能是野指针之类的问题。
发表于 2019-10-10 18:47:51 回复(2)
strcpy 结束的标志是遇到\0,并且会把\0加进去,所以就需要8个字节的空间,而t只申请了7个字节的空间
发表于 2019-09-09 09:47:16 回复(4)
C4driod编译通过,但结果是乱码
发表于 2019-10-20 19:05:14 回复(1)
想改变 s的内容必须传递地址,否则只是值传递。
发表于 2019-09-19 17:43:36 回复(0)
一点点拙见,希望大牛改错 如果考虑野指针的问题,char *s报错,如果忽略野指针的问题的话,我认为s=t的意思是指针s指向数组t的首地址,后一句调用strcpy又将指针s指向常量区example的首地址e,所以这里面是没有报错的。虽然example占用8个字节长度,但并没有放到数组t中。
发表于 2019-09-11 11:39:28 回复(0)