Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sizeof vs Strlen

Tags:

c

sizeof

strlen

#include <stdio.h> #include <string.h>  int main(int argc, char *argv[]) {     char string[] = "october"; // 7 letters      strcpy(string, "september"); // 9 letters      printf("the size of %s is %d and the length is %d\n\n", string,         sizeof(string), strlen(string));      return 0; } 

Output:

$ ./a.out the size of september is 8 and the length is 9 

Is there something wrong with my syntax or what?

like image 525
beparas Avatar asked Mar 30 '12 04:03

beparas


People also ask

What is difference between sizeof and strlen?

strlen() is used to get the length of a string stored in an array. sizeof() is used to get the actual size of any type of data in bytes. Besides, sizeof() is a compile-time expression giving you the size of a type or a variable's type. It doesn't care about the value of the variable.

Can we use sizeof for strings?

String Length in C Using the sizeof() OperatorWe can also find the length of a string using the sizeof() Operator in C. The sizeof is a unary operator which returns the size of an entity (variable or value). The value is written with the sizeof operator which returns its size (in bytes).

What can I use instead of strlen?

strlen() in C-style strings can be replaced by C++ std::strings.

Does strlen count null?

The strlen() function calculates the length of a given string. The strlen() function is defined in string. h header file. It doesn't count null character '\0'.


1 Answers

sizeof and strlen() do different things. In this case, your declaration

char string[] = "october"; 

is the same as

char string[8] = "october"; 

so the compiler can tell that the size of string is 8. It does this at compilation time.

However, strlen() counts the number of characters in the string at run time. So, after you call strcpy(), string now contains "september". strlen() counts the characters and finds 9 of them. Note that you have not allocated enough space for string to hold "september". This is undefined behaviour.

like image 51
Sean Avatar answered Oct 03 '22 14:10

Sean