C語言中返回字串函式的四種實現方法
阿新 • • 發佈:2019-01-07
其實就是要返回一個有效的指標,尾部變數退出後就無效了。
使用分配的記憶體,地址是有效
char *fun()
{
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
}
但這種方式需要注意,必須由使用將將返回的地址free掉
將地址由入參傳入
char* fun(char*s)
{
if (s)
strcpy(s, "abc ");
return s;
}
這種方式呼叫都要注意給s分配的大小是足夠。
可以這樣:
char* fun(char*s, int len)
{
if (s)
{
strncpy(s, "abc ", len-1);
s[len-1] = 0;
}
return s;
}
或才使用區域性靜態變數
char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
這種方式需要注意,不要修改返回的這個字串,由於是共享地址,對它的修改會反應到每個呼叫者的。可以這樣:
const char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
還有一種是使用全域性變數
char g_s[100];
char* fun()
{
strcpy(g_s, "abc ");
return s;
}
同樣的,也要注意這個變數可儲存的最大空間。
使用分配的記憶體,地址是有效
char *fun()
{
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
}
但這種方式需要注意,必須由使用將將返回的地址free掉
將地址由入參傳入
char* fun(char*s)
{
if (s)
strcpy(s, "abc ");
return s;
}
這種方式呼叫都要注意給s分配的大小是足夠。
可以這樣:
char* fun(char*s, int len)
{
if (s)
{
strncpy(s, "abc ", len-1);
s[len-1] = 0;
}
return s;
}
或才使用區域性靜態變數
char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
這種方式需要注意,不要修改返回的這個字串,由於是共享地址,對它的修改會反應到每個呼叫者的。可以這樣:
const char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
還有一種是使用全域性變數
char g_s[100];
char* fun()
{
strcpy(g_s, "abc ");
return s;
}
同樣的,也要注意這個變數可儲存的最大空間。