memset()
объявлено о возвращении void*
это всегда то же самое значение, что и адрес, переданный в функцию.
Какая польза от возвращаемого значения? Почему не возвращается void
?
Подпись соответствует всем другим подобным функциям: memcpy()
, strcpy()
и т. д. Я всегда думал, что это было сделано для того, чтобы можно было связывать вызовы с такими функциями и использовать такие вызовы в выражениях иначе
Тем не менее, я никогда не сталкивался с реальной ситуацией, когда я чувствовал бы необходимость использовать возвращаемое значение таким образом.
Может использоваться для цепочки вызовов, например:
char a[200];
strcpy(memset(a, 0, 200), "bla");
Для того, чтобы использовать функцию в качестве аргумента для другой функции, такой как sprintf
Я наткнулся на этот вопрос, когда гуглил, чтобы посмотреть, что вернул memset.
У меня есть некоторый код, в котором я проверяю одно значение, а затем проверяю, является ли значение нулем.
Поскольку в C нет полностью переносимого способа проверки нулей, я должен запустить memset посередине.
Итак, мой код:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Это говорит о цели цепочки, указанной в предыдущих вопросах, но это пример использования этой техники.
Я оставлю это на усмотрение других, чтобы судить, хорошее ли это кодирование или нет.