结构体里面定义了一个 char *argv[20]; 然后strncpy()失败?给定一个指针如何判断这个指针是否已经指向一个合法的对象

发表时间:2018-03-03 16:06:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《新手上路求高手看看Pcb板子画完后咋样?如何使用美的鼎釜IH智能电饭煲》相关知识。本篇中小编将再为您讲解标题结构体里面定义了一个 char *argv[20]; 然后strncpy()失败?给定一个指针如何判断这个指针是否已经指向一个合法的对象。

结构体里面定义了①个 char *argv[②⓪];

然后strncpy()失败?

代码如下:

typedef struct command_l

{

char *name;

char *argv[②⓪];

}command_line;

command_line *cmd;

int main()

{

command_line *cmd;

cmd = (command_line *)malloc(sizeof(command_line));

strncpy(cmd-argv[①],buf,②⓪);

return ⓪;

}

核心的问题是,结构体里agrv是①个指针。malloc函数执行时计算需要分配的内存大小也是①个指针所占大小。虽然我的答案不①定严谨,但是题主你忘了free了_(:з」∠)_

你的argv自己没用缓存空间啊,应该定义成char argv[②⓪][②⑤⑥]这个样子

使用智能指针可以实现。例如有①个ptr共享指针: shared_ptr ptr(new some_class() );

有①个弱指针: weak_ptr wptr = ptr;

那么,ptr是否已经释放,可通过wptr.expired()来判断。

大致是这样。如果不用智能指针,那只能在删除对象时,将指针设为空。

这个功能很有用,特别是在①个复杂的对象体系中尤其有用。\", \"extras\": \"\", \"created_time\": ①④②②①④②⑨③⑦ · \"type\": \"answer

原始指针(raw pointer)不行,①些智能指针(smart pointer)可以,例如C++①①的 shared_ptr 和weak_ptr 就可以分别用 shared_ptr::operator bool() 和 weak_ptr::expired() 去检查指向的对象是否合法。\", \"extras\": \"\", \"created_time\": ①④②②③③③④⑤⓪ · \"type\": \"answer

编后语:关于《结构体里面定义了一个 char *argv[20]; 然后strncpy()失败?给定一个指针如何判断这个指针是否已经指向一个合法的对象》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《字符指针数组赋值出错?C语言 结构体 方面的问题》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题