Какое использование memset() возвращает значение?

memset() объявлен как возвращаемый void*, который всегда совпадает с адресом, переданным в функцию.

Какое использование возвращаемого значения? Почему он не возвращает void?

Ответ 1

Подпись соответствует всем другим подобным функциям: memcpy(), strcpy() и т.д. Я всегда думал, что это было сделано для того, чтобы можно было связать вызовы с такими функциями и в противном случае использовать такие вызовы в выражениях.

Тем не менее, я никогда не сталкивался с ситуацией в реальном мире, где я был бы вынужден использовать возвращаемое значение таким образом.

Ответ 2

Он может использоваться для цепочки вызовов, например:

char a[200];
strcpy(memset(a, 0, 200), "bla");

Ответ 3

Чтобы использовать функцию в качестве аргумента для другой функции, такой как sprintf

Ответ 4

Я столкнулся с этим вопросом, когда Googling посмотрел, что вернулся memset.

У меня есть код, где я тестирую одно значение, тогда если это истинный тест, чтобы увидеть, является ли значение нулями.

Поскольку в C нет полностью переносного способа проверки нуля, мне нужно запустить memset в середине.

Итак, мой код:

if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )

Это говорит о цепочки целей, перечисленных в предыдущих вопросах, но это пример использования для этой техники.

Я оставлю его другим, чтобы судить, хорошо ли это кодирование или нет.