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