Returning an array element from an array created within the function in C? -
is proper thing in c ?
char *func1() { char *str[3] = { "so", "is", "amazing" }; return str[1]; }
the char *func1()
returns pointer, pointing location in memory string stored. when func1()
returns won't str
array go out of scope , not returning pointer object not exist? dangling pointer (is right name?)
so have 2 solutions make str
global never goes out of scope , pointer pointer valid memory address, seems dirty.
the other solutions
char *func2() { char *str[3] = { "so", "is", "amazing" }; int str1len = strlen(str[1]); char *ret = (char *)malloc(str1len) ; // create block of mem hold str[1]. strncpy(ret, str[1], str1len); return ret; }
is correct ? proper way func1()
or func2()
? or there better way?
i have been using func1()
time , has not created problems me, mean func1()
doing right thing? , func2()
unnecessary?
in first function, there no problem returning str[1]
not pointing local variable, pointer string literal. note string literals should declared const
:
const char *func1(void) { const char *str[3] = { "so", "is", "amazing" }; return str[1]; }
your second function returns pointer allocated space. pointer need freed @ point. allocation incorrect, should allocate 1 byte final '\0'
. can use strcpy
copy string allocated space, or use strdup()
both:
char *func2(void) { const char *str[3] = { "so", "is", "amazing" }; int size = strlen(str[1]) + 1; char *ret = malloc(size); return strcpy(ret, str[1]); }
or simply:
char *func2(void) { const char *str[3] = { "so", "is", "amazing" }; return strdup(str[1]); }
never use strncpy
, not think does. error prone both programmer , whoever read code.
Comments
Post a Comment