第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從C函數(shù)返回字符串

從C函數(shù)返回字符串

C
陪伴而非守候 2019-11-13 13:35:35
我已經(jīng)3年沒(méi)有使用C了,在很多事情上我都非常生銹。我知道這看起來(lái)很愚蠢,但目前無(wú)法從函數(shù)返回字符串。請(qǐng)假設(shè):我不能string.h為此使用。這是我的代碼:#include <ncurses.h>char * getStr(int length){       char word[length];    for (int i = 0; i < length; i++)    {        word[i] = getch();    }    word[i] = '\0';    return word;}int main(){    char wordd[10];    initscr();    *wordd = getStr(10);    printw("The string is:\n");    printw("%s\n",*wordd);    getch();    endwin();    return 0;}我可以捕獲字符串(使用我的getStr函數(shù)),但無(wú)法使其正確顯示(我得到垃圾)。感謝幫助。
查看完整描述

3 回答

?
慕村9548890

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;

}


查看完整回答
反對(duì) 回復(fù) 2019-11-13
?
牧羊人nacy

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)操作:

  1. 使用malloc或類(lèi)似方法在堆上分配內(nèi)存,然后返回該指針。free完成內(nèi)存后,調(diào)用者將需要進(jìn)行調(diào)用。

  2. 在調(diào)用函數(shù)(將使用該字符串的函數(shù))中在堆棧上分配該字符串,然后將指針傳遞給該函數(shù)以將該字符串放入其中。在對(duì)調(diào)用函數(shù)的整個(gè)調(diào)用過(guò)程中,其堆棧上的數(shù)據(jù)有效。僅當(dāng)您返回該堆棧分配的空間后,其他空間才會(huì)使用它。


查看完整回答
反對(duì) 回復(fù) 2019-11-13
  • 3 回答
  • 0 關(guān)注
  • 590 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)