Я новичок в программировании на C, и меня смущает математика указателя.У меня есть массив символов размером 32. Насколько я понимаю, это означает, что массив также составляет 32 байта, поскольку символьная переменная имеет размер 1 байт, следовательно, 32 characters * 1 byte = 32 bytes
.Проблема заключается в том, что при наличии функции, имеющей пустой указатель, который указывает на массив символов, как описано ранее.Я считаю, что сегмент кода
for (count = 0; count < size; count++)
*((int*) raw_sk + count) = 0
должен установить все слоты в буфере raw_sk, должен быть установлен в 0. Однако, когда я запускаю программу, я получаю ошибку сегментации.Я подумал, что это может быть тот факт, что я добавляю счет к адресу.Я думал, что если бы я добавил один к адресу, я бы перешел к следующему слоту в массиве.Может кто-нибудь указать, где я иду не так?Функция, которую я использую, ниже.Спасибо!
void
write_skfile (const char *skfname, void *raw_sk, size_t raw_sklen)
{
int fdsk = 0;
char *s = NULL;
int status = 0;
int count = 0;
int size = (raw_sklen);
/* armor the raw symmetric key in raw_sk using armor64 */
s = armor64(raw_sk, raw_sklen);
/* now let's write the armored symmetric key to skfname */
if ((fdsk = open (skfname, O_WRONLY|O_TRUNC|O_CREAT, 0600)) == -1) {
perror (getprogname ());
/*scrubs the armored buffer*/
for(count = 0; count < armor64len(s); count++)
s[count] = '0';
free (s);
/* scrub the buffer that's holding the key before exiting */
for (count = 0; count < size; count++)
*((int*)raw_sk + count) = 0;
exit (-1);
}
else {
status = write (fdsk, s, strlen (s));
if (status != -1) {
status = write (fdsk, "\n", 1);
}
for (count = 0; (size_t)count < 22; count++)
*((int*)raw_sk + count) = 0;
free (s);
close (fdsk);
/* do not scrub the key buffer under normal circumstances
(it's up to the caller) */
if (status == -1) {
printf ("%s: trouble writing symmetric key to file %s\n",
getprogname (), skfname);
perror (getprogname ());
/* scrub the buffer that's holding the key before exiting */
/* scrub the buffer that's holding the key before exiting MY CODE
for (count = 0; count < size; count++)
*((int*)raw_sk + count) = 0;*/
exit (-1);
}
}
}