简体   繁体   中英

How strtok_r function return values?

I am doing component test for a 'C' code. I have read the functionality of strtok_r function but I am not able to get the return value that I want to pass in strncmp ' function. My code is contains strtok_r and strncmp functions as below:

typedef struct BufferN {
    uint32_t v;
    uint32_t m;
} My_Buffer;

char subsystemstr[64] = { '\0' };
My_Buffer buffer;
char *p_system;
char *p_subsystem;

(void) GetString(&buffer, subsystemstr, sizeof(subsystemstr));
p_system = strtok_r (subsystemstr, ":", &p_subsystem);

for (i = 0u; i < 100; i++) 
{
    if (strncmp(p_system, "all", 64) == 0) 
    {
       /*Some Code Statement*/
    }
}

Since array subsystemstr is initialized to '\\0', I am modifying this array value with the help of function GetString as below:

strncpy(subsystemstr, "all:", 64);

When I am printing subsystemstr , I am having updated array as:

["all:", '\0' <repeats 59 times>]

but when I am printing p_system (return value of strtok_r). I am getting

[0x388870 ""] 

I am confused how it is working. Actually I want value of p_system = "all" so that 'strncmp' function can return 0. Please suggest.

I suspect your understanding of what

p p_system

actually does (prints the address of p_system)
in gdb, the command would be

p *p_system

or, using the builtin printf command

printf "%s", p_system

or, using the C function

call printf("%s", p_system)

or,

call (void)puts(p_system)

or, if you do not mind also seeing some address values

x /s p_system

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM