我有以下 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);
关于c - 如何更安全地编写此 C 片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/911660/