首页 > 试题广场 >

以下代码段有问题的是()

[不定项选择题]
以下代码段有问题的是()
  • <pre>void func1(char *e){
      char *p1;
      p1=malloc(100);
      sprintf(p1,error:"%s'.",e);
      local_log(p1);
      }
    </pre>
  • <pre>
    int func2(char *filename)
      {
        FILE *fp;
        int key;
        fp=fopen(filename,"r");
        fscanf(fp,"%d",&key);
        return key;
       }
    </pre>
  • <pre>
    void func3(char *info){
      char *p,*pp;
      p=malloc(100);
      pp=p;
      free(p);
      sprintf(pp,*info:"%s'.",info);
      free(pp);
      }
    </pre>
  • 选项全部正确
推荐
答案是ABC
               答案是A 申请了空间没有释放,答案B 打开流没有关闭,答案C free了二次,但是其实指针都是一块内存空间
编辑于 2015-12-02 18:01:57 回复(5)
除了楼上所说的错误以外A和C还有两个错误,sprintf之间所有的字符都应该在冒号以内
发表于 2015-12-10 15:45:06 回复(1)
A、首先 malloc的用法也不对, malloc默认返回的是空指针void* 需要程序猿在malloc 前面指定类型,比如本例 p1= (char*) malloc(100)。其次在函数内部malloc的内存需要 free
B 、明显的没有关闭文件流
C、free两次 程序会出错
发表于 2016-03-06 17:00:07 回复(1)
sprintf函数的用法:
在将各种类型的数据构造成字符串时,sprintf的强大功能很少会让你失望的,
由于sprintf和printf在用法上几乎一样,知识打印的目的地不同而已,sprintf打印到字符串中,而printf则直接在命令行上输出。这也是sprintf比printf有用得多;
sprintf是个变参函数,定义如下:
int sprintf(char *buffer,const char *format[,argument ]..);
除了前俩个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数;格式化字符串上。
printf 和sprintf都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式,说明符(format specifications)来占据一个位置,在后边的便餐列表中提供相应的变量,最终函数就会用相应的变量来替代那个说明符,产生一个调用者想要的字符串。
格式化数字字符串:
sprintf 最常用的应用之一莫过于把整数打印到字符串中,所以sprintf在大多数场合可以替代itoa.
 
B、
int func2(char *filename)
  {
    FILE *fp;
    int key;
    fp=fopen(filename,"r");
    fscanf(fp,"%d",&key);
    return key;
   }

C、
void func3(char *info){
  char *p,*pp;
  p=malloc(100);
  pp=p;
  free(p);
  sprintf(pp,*info:"%s'.",info);
  free(pp);
  }

A 申请了空间没有释放,
B fp=fopen();打开流没有关闭,
C free了二次,但其实,pp=p;两个指针都指向同一块内存空间。只需释放一次就够了。
发表于 2016-01-05 21:31:33 回复(0)
踏马,d就没问题了?
发表于 2016-09-09 12:29:22 回复(0)
弱弱的问一句。。D对了么。。。
发表于 2016-09-05 00:43:36 回复(2)
谁能说说
error:"%s'."
*info:"%s'."
这两个是什么鬼

编辑于 2016-06-26 16:52:38 回复(2)
A、1、malloc前面没有指定类型。
       2、malloc没有释放。
B、没有关闭文件流
C、free了两次。
发表于 2018-02-28 15:11:46 回复(0)
那不应该ABCD?
发表于 2017-02-11 18:41:12 回复(0)
kop头像 kop
c中不知道是不是应该 pp = &p;
发表于 2016-08-19 09:39:51 回复(1)

A 选项中的代码有问题。sprintf(p1, error:"%s'.", e);这一行代码应该写为sprintf(p1, "%s'.", e);,去掉了error:部分,否则会导致语法错误。 申请了空间没有释放

B 选项中打开流没有关闭

C 选项中的代码有问题。在第一次使用free(p);后,指针pp仍然指向已释放的内存块,然后试图通过sprintf(pp, *info: "%s'.", info);写入已释放的内存块,这会导致未定义行为。

发表于 2023-09-26 14:21:07 回复(0)

主要就是这第二个参数怎么理解?有这样的写法?kidding me? 还有有问题指的是什么?warning or error?

sprintf(p1,error:"%s'.",e);
sprintf(pp,*info:"%s'.",info);
编辑于 2017-02-20 22:25:03 回复(0)
解析里有说连续free两次程序会出错,我试过了,正常,没有出错。
发表于 2016-03-27 21:22:44 回复(0)
皮友们,第三题中的 free( p ) 之后还继续使用者块内存是不是有问题?
发表于 2020-02-29 10:05:41 回复(0)

D有问题嘛?

发表于 2019-11-20 22:18:03 回复(0)
竟然是多选题!
发表于 2019-11-04 21:28:19 回复(0)
关于一些成对存在的操作
发表于 2019-08-17 22:28:13 回复(0)

注意malloc空间的释放和文件流的关闭

同一空间只能释放一次

发表于 2019-03-09 10:07:08 回复(0)
A、首先 malloc的用法也不对, malloc默认返回的是空指针void* 需要程序猿在malloc 前面指定类型,比如本例 p1= (char*) malloc(100)。其次在函数内部malloc的内存需要 free B 、明显的没有关闭文件流 C、free两次 程序会出错
发表于 2018-12-05 15:50:20 回复(0)
选了ABCD,***么
发表于 2018-09-02 00:01:56 回复(0)
没有关闭文件
发表于 2018-04-24 08:23:26 回复(0)