memset()
объявлен как возвращающий void*
, который всегда является тем же значением, что и адрес, переданный в функцию.
Какая польза от возвращаемого значения? Почему не возвращается void
?
memset()
объявлен как возвращающий void*
, который всегда является тем же значением, что и адрес, переданный в функцию.
Какая польза от возвращаемого значения? Почему не возвращается void
?
Сигнатура соответствует всем другим аналогичным функциям: memcpy()
, strcpy()
и т. Д. Я всегда думал, что это было сделано для того, чтобы можно было связать вызовы таких функций, и иначе использовать такие вызовы в выражениях.
Тем не менее, я никогда не сталкивался с реальной ситуацией, когда я чувствовал бы себя обязанным использовать возвращаемое значение таким образом.
Его можно использовать для объединения вызовов, например:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
возвращать указатель после последнего скопированного. memset(my_strcpy(a, "bla"), 0, a + 200);
(как std::copy_n
и std::fill_n
в C ++).
- person alfC; 16.08.2019
Чтобы использовать функцию в качестве аргумента для другой функции, такой как sprintf
Я столкнулся с этим вопросом, когда искал в Google, что вернул memset.
У меня есть код, в котором я проверяю одно значение, а затем, если это правда, проверяю, является ли значение нулями.
Поскольку в C нет полностью переносимого способа проверки нулей, мне приходится запускать memset посередине.
Итак, мой код:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Это говорит о целях связывания, перечисленных в предыдущих вопросах, но это пример использования этой техники.
Я оставлю это на усмотрение других, чтобы судить, хорошее это кодирование или нет.
mem*
функциями, которые в основном возвращаютvoid*
? - person Component 10   schedule 05.12.2012strcat()
? Иногда стандартные функции - это то, что они указаны, а не то, чем они должны быть. - person DevSolar   schedule 05.12.2012void
? Разве не лучше всегда что-то возвращать (и чем значительнее, тем лучше)? - person Matthieu M.   schedule 05.12.2012fill_n
возвращает указатель за последним, которому он назначен, что эквивалентно возвратуdest + n
. Это, в свою очередь, согласуется с тем, что имеет смысл возвращать для обобщенных указателей (итераторов). - person alfC   schedule 16.08.2019