C Programming - Functionality strlen

I'm trying to understand some string functions so that I can use them more efficiently in subsequent coding projects, so I installed a simple program below:

#include <stdio.h>
#include <string.h>

int main (void)
{
// Declare variables:
char test_string[5];
char test_string2[] = { 'G', 'O', '_', 'T', 'E', 'S', 'T'};
int init; 
int length = 0;
int match;

// Initialize array:
for (init = 0; init < strlen(test_string); init++)
{    test_string[init] = '\0';
}

// Fill array:
test_string[0] = 'T';
test_string[1] = 'E';
test_string[2] = 'S';
test_string[3] = 'T';

// Get Length:
length = strlen(test_string);

// Get number of characters from string 1 in string 2:
match = strspn(test_string, test_string2);

printf("\nstrlen return = %d", length);
printf("\nstrspn return = %d\n\n", match);

return 0;
}

I expect to see a refund:

strlen return = 4 strspn return = 4

strlen return = 6 strspn return = 4. , , char test_string [5] 5 00 . for ( ) test_string hex 00. 1 4 ( test_string [0] test_string [3]) , . strlen 4, 0 , , [4]. strlen 6. - ? !

+4
3
char test_string[5];

test_string - 5 char.

for (init = 0; init < strlen(test_string); init++)

Kaboom. strlen '\0' null. test_string , undefined. , , test_string .

, strlen() for . strlen() ( , ), , , O (N 2).

, test_string , :

char test_string[5] = "";

, 4 :

char test_string[5] = "TEST";

:

char test_string[] = "TEST";

( , 5 .)

:

char test_string2[] = { 'G', 'O', '_', 'T', 'E', 'S', 'T'};

, test_string2 7 '\0'. , test_string2 , , undefined. , - :

char test_string2[] = "GO_TEST";
+7

strlen "\ 0" , , , , 6 , .

, , .

0 ,

char test_string[5] = {0};

, 0, strlen , "TEST".

+4

. , char test_string[5]; 5 , -. , : "char test_string [5] 5 00 ", .

-, strlen(test_string), test_string , , strlen (test_string) undefined. memset( test_string, 0, sizeof(test_string) );.

You fill the "TEST" array, but do not set the NULL byte at the end, so the last byte is still not initialized. If you make memset higher, it will be fixed, or you can manually do it test_string[4] = '\0'.

+2
source

Source: https://habr.com/ru/post/1529338/


All Articles