sprintf拼接char*时候,空指针被识别成“(null)”

eagle229036533 2015-06-30 12:53:01
RT...
比如:
char a[10] = {0};
sprintf(a, "111%s222", b);
其中b是char *类型的。如果b=NULL的话,vs2010的结果会是“111(null)222”。我的预期结果是"111222",请问各位大侠如何解决啊……跪求了!谢谢!
...全文
630 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
9527 2015-06-30
  • 打赏
  • 举报
回复

sprintf(a, "111%s222", b?b:"");
缘中人 2015-06-30
  • 打赏
  • 举报
回复
最后来个字符串替换。(null)替换为空
缘中人 2015-06-30
  • 打赏
  • 举报
回复
c++builder里有个format可以解决
9527 2015-06-30
  • 打赏
  • 举报
回复
引用 4 楼 eagle229036533 的回复:
[quote=引用 2 楼 9527 的回复:]

sprintf(a, "111%s222", b?b:"");
相当于进行了一次判断,怕影响效率…… 有没有其他方法?还是说sprintf都是要进行判断?[/quote] C里面很多使用指针作为参数传递的情况,很多时候都不允许为空,所以,你应该自己保证b的值,而不是靠调用方判断即: 1)在b的来源处保证b不为空,如果为空不要进行后续调用 2)如果保证不了,就只能调用处判断了
eagle229036533 2015-06-30
  • 打赏
  • 举报
回复
引用 2 楼 9527 的回复:

sprintf(a, "111%s222", b?b:"");
相当于进行了一次判断,怕影响效率…… 有没有其他方法?还是说sprintf都是要进行判断?
eagle229036533 2015-06-30
  • 打赏
  • 举报
回复
引用 1 楼 ksrsoft 的回复:
最后来个字符串替换。(null)替换为空
不可以哦,如果字符串里面本身包含“(null)”,也会被替换了

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧