Reputation: 1498
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?
Upvotes: 1
Views: 1250
Reputation: 121971
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).
Upvotes: 6
Reputation: 1744
You can see the effect of this as follows .
int main()
{
printf("%.*s",13,"stackoverflow rocks");
}
which will give you only stackoverflow
.
Upvotes: 2