sprintf crashing
-
06-07-2021 - |
Вопрос
int main()
{
char buf1[100], buf[100]="ddl";
sprintf(buf1, "log_name = '%.*s'", buf);
}
The above program is crashing. I am not able to understand why is this crashing.
As far as I know before the character makes printf
to skip the format code and assign buf to next format code.
But here what is the significance of?
Решение
The format specifier "%.*s"
requires the number of characters to be written to be specified:
sprintf(buf1, "log_name = '%.*s'", 3, buf); /* For example */
/* ^ */
In the posted code only buf
is provided so there are missing arguments, which is undefined behaviour (in this case a crash).
Note, in this case, "%s"
would serve just as well as buf
is null terminated (no requirment for a length unless all characters in buf
must not be copied).
Другие советы
You can see the effect of this as follows .
int main()
{
printf("%.*s",13,"stackoverflow rocks");
}
which will give you only stackoverflow
.
Не связан с StackOverflow