c - Pass unsigned char pointer to atoi without cast -


on embedded device, have passed unsigned char pointer atoi without cast.

unsigned char c[10]="12"; atoi(c); 

question: defined?

i saw somewhere ok string functions, not sure atoi.

edit: btw. concerns have been expressed on 1 of answer below might not ok string functions such strcpy - if got right (?) author meant can in practice can ok.


also here, ok following assignment unsigned char pointer ok too? because used tool complaining "type mismatch (assignment) (ptrs signed/unsigned)"

unsigned char *ptr = strtok(unscharbuff,"-");     // assignment ok unsigned char?  

no, it's not defined. it's constraint violation, requiring compile-time diagnostic. in practice it's very work expect, it's not guaranteed so, , imho it's poor style.

the atoi function declared in <stdlib.h> as:

int atoi(const char *nptr); 

you're passing unsigned char* argument function expects char* argument. 2 types not compatible, , there no implicit conversion 1 other. conforming compiler may issue warning (that counts diagnostic) , proceed generate executable, behavior of executable undefined.

as of c99, call function no visible declaration constraint violation, can't away omitting #include <stdlib.h>.

c still permit calls functions visible declaration declaration not prototype (i.e., doesn't define number of type(s) of parameters). so, rather usual #include <stdlib.h>, add own declaration:

int atoi(); 

which permit calling unsigned char* argument.

this "work", , might possible construct argument standard behavior defined. char , unsigned char values of '1' , '2' guaranteed have same representation

but it's far easier add cast prove it's not necessary -- or, better yet, define c array of char rather array of unsigned char, since it's intended hold string.

unsigned char *ptr = strtok(unscharbuff,"-"); 

this constraint violation. there no implicit conversion unsigned char* char* first argument in strtok call, , there no implicit conversion char* unsigned char* initialization of ptr.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -