سؤال

 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