У меня есть следующий фрагмент кода на 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. Это кажется довольно субъективным вопросом, поэтому Я не уверен, что то, что я принял, на самом деле лучшее. В любом случае, спасибо за все ответы.