Вопрос

 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top