c - 如何更安全地编写此 C 片段?

标签 c memory-management cstring null-terminated strdup

我有以下 C 代码片段,必须找出错误并提出更安全的编写方法:

char somestring[] = "Send money!\n";
char *copy;

copy = (char *) malloc(strlen(somestring));

strcpy(copy, somestring);
printf(copy);

所以错误是 strlen 忽略了字符串的尾随 '\0' 因此它不会为副本分配足够的内存但我不确定它们是什么了解如何更安全地编写它?

我想我可以只使用 malloc(strlen(somestring)+1)) 但我认为一定有比这更好的方法吗?


编辑: 好的,我接受了一个答案,我怀疑我们不会期望 strdup 解决方案,因为它不是 ANSI C 的一部分。这似乎是一个相当主观的问题,所以我不确定我接受的是否真的是最好的。无论如何,感谢您的所有回答。

最佳答案

我无法对以上回复发表评论,但除了检查 返回代码并使用 strncpy,你不应该这样做:

printf(string)

但是使用:

printf("%s", string);

引用:http://en.wikipedia.org/wiki/Format_string_attack

关于c - 如何更安全地编写此 C 片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/911660/

相关文章:

c++ - 在 C/C++ 中声明指针变量的正确方法

c - 为什么下面的程序中打印语句出现了五次?

c++ - 如何在没有访问权限的情况下删除对象?

iphone - 设置UITableViewCell自定义png背景

C - 在数组中使用 malloc() 存储指针,之后不能释放它们

c++ - 在改变 c 字符串时避免内存泄漏

c++ - 如何查找CStringArray中添加的数据个数

c++ - ImageMagick 使用我的真实字体 (Magick++) 转换 SVG

c++ - C++中不同字符串类型的优缺点

c - 加载 UEFI 协议(protocol)的正确方法是什么?