Ajai
Ajai

Reputation: 3490

One liner to find length of a variable

I just stumbled upon the idea that since printf returns the no.of characters it has printed to the output stream why not use it to find length of any variable in c?

The code goes something like this,

#include<stdio.h>
int main()
{
 char *a="Length";
 int i=1000;
 printf("Size: %d\n",printf("%d\n",i)-1);
 printf("String Size: %d",printf("%s\n",a)-1);
 return 1;
}

Am I right? I am not concerned about where it is being used. just wanted to know if my understanding is right.

Upvotes: 0

Views: 103

Answers (2)

Hypersoft Systems
Hypersoft Systems

Reputation: 518

"One liner to find length of a variable"

Not possible unless its builtin to your compiler, or you define a wild and hairy macro half a page long with a few enums to state your type...

For strings, (which you cannot use sizeof on...) see: https://stackoverflow.com/a/22128415/3370790

Upvotes: 0

Constantinius
Constantinius

Reputation: 35039

What do you mean by "length of any variable"? You mean the number of bytes used to store the variable (which better achieved with the sizeof and strlen functions) or the byte length of the string representation of the variables?

For the latter one, you should be careful, since you can use format options to actually modify the results. Consider the following example:

float num = 10.0f;
printf("%.10f", num); // return value should be 13
printf("%f", num);    // return value depends on the implementation of printf and the float value supplied

Also you have to consider that there are other representations than the decimal one.

As others have already stated, printf has the side effect that it actually writes to stdout. If you do not want this, you can use snprintf to write to a buffer and not to stdout:

char buffer[256];
int x = 10;
snprintf(buffer, sizeof(buffer), "%d", x); // return value is '2'

Upvotes: 3

Related Questions