Как использовать strset () в linux на языке c - PullRequest
0 голосов
/ 13 января 2020

Я не могу использовать функцию strset в C. Я использую Linux, и я уже импортировал string.h, но он все еще не работает. Я думаю, что Windows и Linux имеют разные ключевые слова, но я не могу найти решение в Интернете; все они используют Windows.

Это мой код:

   char hey[100];
   strset(hey,'\0');   

ОШИБКА :: предупреждение: неявное объявление функции strset; did you mean strsep`? [-Понятная-декларация-функции] strset (эй, '\ 0');

^ ~~~~~ strsep

Ответы [ 2 ]

4 голосов
/ 13 января 2020

Прежде всего strset (точнее _strset) - это функция Windows -specifi c, ее нет ни в одной другой системе. Прочитав его документацию, вы легко сможете реализовать его.

Но у вас также есть вторичная проблема, потому что вы передаете массив неинициализированный в функцию, которая ожидает указатель на первый символ строки с нулевым символом в конце. Это может привести к неопределенному поведению .

Решением обеих проблем является непосредственная инициализация массива:

char hey[100] = { 0 };  // Initialize all of the array to zero

Если ваша цель состоит в том, чтобы " сбросьте существующую строку с нулевым символом в конце на все нули, затем используйте функцию memset:

char hey[100];

// ...
// Code that initializes hey, so it becomes a null-terminated string
// ...

memset(hey, 0, sizeof hey);  // Set all of the array to zero

В качестве альтернативы, если вы хотите эмулировать поведение _strset, в частности:

memset(hey, 0, strlen(hey));  // Set all of the string (but not including
                              // the null-terminator) to zero
0 голосов
/ 13 января 2020

strset не является стандартной C функцией. Вы можете использовать стандартную функцию memset. Он имеет следующую декларацию

void *memset(void *s, int c, size_t n);

Например

memset( hey, '\0', sizeof( hey ) );
...