3 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
要么在調(diào)用方的堆棧上分配字符串,然后將其傳遞給函數(shù):
void getStr(char *wordd, int length) {
...
}
int main(void) {
char wordd[10 + 1];
getStr(wordd, sizeof(wordd) - 1);
...
}
或?qū)⒆址O(shè)為靜態(tài)getStr:
char *getStr(void) {
static char wordd[10 + 1];
...
return wordd;
}
或在堆上分配字符串:
char *getStr(int length) {
char *wordd = malloc(length + 1);
...
return wordd;
}

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
您要在堆棧上分配字符串,然后返回指向它的指針。當(dāng)函數(shù)返回時(shí),所有堆棧分配都將變?yōu)闊o(wú)效;現(xiàn)在,指針指向堆棧上下次調(diào)用函數(shù)時(shí)可能會(huì)被覆蓋的區(qū)域。
為了執(zhí)行您要執(zhí)行的操作,您需要執(zhí)行以下一項(xiàng)操作:
使用
malloc
或類(lèi)似方法在堆上分配內(nèi)存,然后返回該指針。free
完成內(nèi)存后,調(diào)用者將需要進(jìn)行調(diào)用。在調(diào)用函數(shù)(將使用該字符串的函數(shù))中在堆棧上分配該字符串,然后將指針傳遞給該函數(shù)以將該字符串放入其中。在對(duì)調(diào)用函數(shù)的整個(gè)調(diào)用過(guò)程中,其堆棧上的數(shù)據(jù)有效。僅當(dāng)您返回該堆棧分配的空間后,其他空間才會(huì)使用它。
- 3 回答
- 0 關(guān)注
- 590 瀏覽
添加回答
舉報(bào)