- 
                Notifications
    
You must be signed in to change notification settings  - Fork 538
 
Open
Description
Here the documentation that puzzles me :
//  After a successful first/next method, returns the key for the item that
//  was returned. This is a constant string that you may not modify or
//  deallocate, and which lasts as long as the item in the hash. After an
//  unsuccessful first/next, returns NULL.
CZMQ_EXPORT const char *
    zhash_cursor (zhash_t *self);
I understand that zhash_cursor shall return NULL after an unsuccessful zhash_next.
Here's the thing : is the last zhash_next, i.e. the one that returns NULL in an iteration loop, considered unsuccessful ?
I would answer yes. And yet, in this case, zhash_cursor does not return NULL after that last zhash_next, it returns the key from the previous iteration.
Here is a main function that illustrate this behavior
#include "stdlib.h"
#include "stdio.h"
#include "czmq.h"
int main(int argc, char** argv)
{
    zhash_t* h = zhash_new();
    zhash_autofree(h);
    zhash_insert(h, "Key 1", "Value 1");
    zhash_insert(h, "Key 2", "Value 2");
    zhash_insert(h, "Key 3", "Value 3");
    const char* value = zhash_first(h);
    const char* key = zhash_cursor(h);
    printf("%s => %s\n", key, value);
    value = zhash_next(h);
    key = zhash_cursor(h);
    printf("%s => %s\n", key, value);
    value = zhash_next(h);
    key = zhash_cursor(h);
    printf("%s => %s\n", key, value);
    value = zhash_next(h);
    key = zhash_cursor(h);
    printf("%s => %s\n", key ? key : "NULL", value ? value : "NULL");  // Expected to print "NULL => NULL", but prints "Key 1 => NULL" 
    zhash_destroy(&h);
    return EXIT_SUCCESS;
}Metadata
Metadata
Assignees
Labels
No labels