[Powered by Google Translate] [CS50 Leabharlann] [Nate Hardison] [Ollscoil Harvard] Is é [seo CS50. CS50.TV] Tá an leabharlann CS50 uirlis úsáideach go bhfuil muid suiteáilte ar an fearas a dhéanamh níos éasca duit chun cláir a scríobh go úsáideoirí go pras le haghaidh ionchur. Sa físeán seo, beidh orainn tarraingt siar na cuirtíní agus breathnú ar cad é go díreach atá sa leabharlann CS50. Sa físeán ar leabharlanna C, labhairt linn faoi conas tá tú ag # comhaid ceanntásca an leabharlann i do cód foinse, agus ansin tú nasc le comhad leabharlann dhénártha le linn na céime ag nascadh den phróiseas tiomsaithe. Na comhaid header shonrú an comhéadan na leabharlainne. Is é sin, go mion siad go léir na n-acmhainní go bhfuil an leabharlann ar fáil chun tú a úsáid, cosúil le dearbhuithe feidhm, tairisigh, agus cineálacha sonraí. Tá an comhad leabharlann dhénártha cur chun feidhme an leabharlann, a chéile ó chomhaid cheanntáisc na leabharlainne agus ar an leabharlann. comhaid c cód foinse. Níl an comhad leabharlann dénártha an-suimiúil breathnú ar ós rud é tá sé, go maith, i dénártha. Mar sin, a ligean ar ghlacadh le breathnú ar na comhaid header don leabharlann ina ionad. Sa chás seo, níl ach aon chomhad header ar a dtugtar cs50.h. Táimid tar éis suiteáilte sé ar an t-úsáideoir san áireamh eolaire chomh maith le comhaid header na leabharlanna córas eile '. Ceann de na rudaí chéad beidh tú faoi deara go bhfuil go n-áirítear cs50.h # comhaid header ó leabharlanna eile - snámhphointe, teorainneacha, caighdeán bool, agus lib caighdeánach. Arís, tar éis an prionsabal nach reinventing an roth, tá muid tógtha leis an leabharlann CS0 ag baint úsáide as uirlisí eile sin ar fáil dúinn. Is é an rud eile go mbainfidh tú a fheiceáil sa leabharlann go shainiú i ndáil le cineál nua ar a dtugtar "teaghrán." An líne seo Cruthaíonn ndáiríre ach ailias don chineál * Char, mar sin ní dhéanann sé imbue magically an cineál teaghrán nua le tréithe coitianta a bhaineann le rudaí teaghrán i dteangacha eile, mar shampla fad. Is é an chúis atá déanta againn seo a sciath ríomhchláraitheoirí nua ó na sonraí gory de leideanna dtí go mbíonn siad ullamh. Tá an chuid eile den comhad header an dearbhú de na feidhmeanna go soláthraíonn an leabharlann CS50 chomh maith le doiciméadú. Fógra an leibhéal mionsonraithe sa tuairimí anseo. Tá sé seo Super tábhachtach ionas go mbeidh a fhios ag daoine conas úsáid a bhaint na feidhmeanna sin. Dearbhaímid, ar a seal feidhmeanna, go spreagfaidh an t-úsáideoir agus carachtair ar ais, dúbailtí, báid, ints, fada longs, agus teaghráin, ag baint úsáide as ár cineál teaghrán féin. Tar éis an prionsabal bhfolach faisnéise, ní mór dúinn a chur ar ár sainmhíniú i gcomhad ar leith chur chun feidhme c -. cs50.c-- lonnaithe san eolaire foinse úsáideoir. Táimid tar éis ar choinníoll go comhad ionas gur féidir leat a chur le breathnú ar sé, foghlaim ó sé, agus é a recompile ar mheaisíní éagsúla más mian leat, cé is dóigh linn go bhfuil sé níos fearr a bheith ag obair ar an fearas don rang. Mar sin féin, a ligean ar ghlacadh le breathnú ar sé anois. Tá feidhmeanna GetChar, GetDouble, GetFloat, GetInt, agus GetLongLong a tógadh go léir ar bharr an fheidhm GetString. Casadh sé amach go leanann siad ar fad go bunúsach an patrún céanna. Baineann siad úsáid as lúb agus go pras an t-úsáideoir le haghaidh líne amháin d'ionchur. Filleann siad luach ar leith má tá an t-úsáideoir ionchuir líne folamh. Iad ag iarraidh pharsáil an úsáideora ionchur mar an cineál is cuí, go mbeadh sé ina ruabhric, dúbailte, a snámhphointe, etc Agus ansin siad ar ais ceachtar an toradh más rud é an t-ionchur a bhí pharsáil go rathúil nó reprompt siad an t-úsáideoir. Ag leibhéal ard, nach bhfuil aon rud i ndáiríre tricky anseo. D'fhéadfá a bheith i scríbhinn cód céanna struchtúrtha féin san am atá caite. B'fhéidir gurb é an chuid is mó cryptic-lorg an glaoch sscanf go parses an úsáideora ionchur. Is Sscanf chuid de na teaghlaigh chomhshó ionchur formáid. Cónaíonn sé i io.h caighdeánach, agus is é a phost a pharsáil ar shraith C, de réir bhformáid ar leith, a stóráil na torthaí parsáil i athróg ar fáil ag an té atá ag glaoch. Ó tharla go bhfuil na feidhmeanna ionchur comhshó formáid an-úsáideach, feidhmeanna a úsáidtear go forleathan nach bhfuil Super iomasach ar dtús, beidh muid ag dul thar conas a oibríonn sscanf. Is í an argóint chéad sscanf a * Char - ar pointeoir go dtí carachtar. Maidir leis an fheidhm a bheith ag obair i gceart, Ba chóir go mbeadh an carachtar an chéad charachtar de shraith C, fhoirceannadh le carachtar \ nialasach 0. Is é seo an teaghrán a pharsáil Is í an argóint dara sscanf teaghrán formáide, de ghnáth a ritheadh ​​i mar tairiseach téad, agus a d'fhéadfadh bheith agat le feiceáil ar shraith mar seo roimh nuair a úsáid printf. Léiríonn comhartha faoin gcéad sa teaghrán formáide a sonraitheoir tiontaithe. An carachtar díreach tar éis comhartha faoin gcéad, Léiríonn an cineál C gur mian linn sscanf le tiontú go. I GetInt, a fheiceann tú go bhfuil d% agus c%. Ciallaíonn sé seo go sscanf iarracht a slánuimhir dheachúlach - an% d - agus ruabhric - an c%. I gcás gach sonraitheoir tiontaithe sa teaghrán formáide, sscanf súil argóint comhfhreagrach níos déanaí ina liosta argóint. Ní mór go argóint pointe go bhfuil suíomh cuí clóscríofa inar a stóráil ar an toradh an chomhshó. Is é an bealach is gnách é seo a dhéanamh a chruthú athróg ar an chruach roimh an glaoch sscanf do gach mír gur mian leat a pharsáil as an teaghrán agus a úsáid ansin an t-oibreoir seoladh - an COMHARTHA AGUIS - chun leideanna pas do na hathróga chun an glaoch sscanf. Is féidir leat a fheiceáil go bhfuil i GetInt a dhéanamh againn go díreach seo. Ceart roimh an glaoch sscanf, ní mór dúinn a dhearbhú ina slánuimhir a dtugtar n agus c glao Char ar an chruach, agus pas muid leideanna chun iad a chur sa ghlao sscanf. Ag cur na n-athróg ar an chruach is fearr thar úsáid a bhaint as spás a leithdháileadh ar an gcarn le malloc, ós rud é tú a sheachaint forchostais an glaoch malloc, agus ní gá duit a bheith buartha faoi leaking chuimhne. Ní carachtair nach bhfuil réimír ag comhartha faoin gcéad pras chomhshó. Ina ionad sin siad a chur díreach chuig an sonraíocht formáid. Mar shampla, dá mbeadh an teaghrán formáide i GetInt a% d ina ionad sin, Ba mhaith sscanf breathnú ar an litir a leanúint ag slánuimhir, agus cé go mbeadh sé iarracht a thiontú ar an slánuimhir, ní bheadh ​​sé a dhéanamh aon rud eile leis an a. Is é an eisceacht amháin chun an spás bán. Carachtair spás bán i teaghrán formáide a mheaitseáil aon mhéid de spás bán - fiú ar bith ar chor ar bith. Mar sin, sin an fáth a luann an trácht b'fhéidir, le rá agus / nó trailing spás bán. Mar sin, beidh ag an bpointe seo tá sé cosúil ár n-glaoch sscanf iarracht a pharsáil teaghrán ionchur an úsáideora ag seiceáil le haghaidh spás bán tosaigh is féidir, ina dhiaidh sin o go mbeidh a thiontú agus a stóráil i athróg n slánuimhir le leanúint ag roinnt méid de spás bán, agus ina dhiaidh sin le carachtar atá stóráilte sa c Char athraitheach. Cad mar gheall ar an luach ar ais? Beidh Sscanf pharsáil an líne ionchur ó thús go deireadh, stopadh nuair a shroicheann sé an deireadh nó nuair a carachtar san ionchur ní oireann an carachtar formáide nó nuair nach féidir a dhéanamh chomhshó é. Tá luach ar ais sé a úsáidtear chun Singil nuair a stop sé. Má stop sé, mar gheall ar shroich sé an deireadh an teaghrán ionchur sula ndéanfar aon conversions agus roimh teip a mheaitseáil chuid den teaghrán formáide, ansin tá an difríocht idir na naisc speisialta tairiseach ar ais. Seachas sin, tugann sé líon na conversions rathúil, D'fhéadfadh a bheith ina 0, 1, nó 2, ós rud é againn d'iarr ar feadh dhá conversions. In ár gcás, ba mhaith linn a dhéanamh cinnte go bhfuil an t-úsáideoir clóscríofa i slánuimhir agus ní raibh ach ina slánuimhir. Mar sin, ba mhaith linn sscanf a thabhairt ar ais 1. Féach ar cén fáth? Más rud é ar ais sscanf 0, rinneadh ansin ní conversions, an t-úsáideoir clóscríofa mar sin rud éigin eile seachas an slánuimhir ag tús an t-ionchur. Má fhilleann sscanf 2, ansin raibh an t-úsáideoir cineál gceart é ag tús an t-ionchur, ach chlóscríobh siad ansin i roinnt carachtar neamh-spás bán ina dhiaidh sin ó% d'éirigh c chomhshó. Wow, tá go leor míniú fada ar cheann glaoch fheidhm. Mar sin féin, más mian leat tuilleadh eolais a fháil ar sscanf agus a deirfiúracha, seiceáil amach an leathanaigh fear, Google, nó iad araon. Tá go leor de na roghanna teaghrán formáide, agus is féidir iad a shábháil tú a lán obair láimhe nuair a iarraidh chun teaghráin pharsáil i C. Is é an fheidhm deiridh sa leabharlann chun féachaint ar GetString. Casadh sé amach go bhfuil GetString feidhm tricky a scríobh i gceart, cé is cosúil sé cosúil le a leithéid de tasc simplí coitianta. Cén fáth é seo an cás? Bhuel, a ligean ar smaoineamh ar conas táimid ag dul a stóráil ar an líne go bhfuil an t-úsáideoir cineálacha isteach Ós rud é teaghrán sraith carachtair, D'fhéadfadh muid ag iarraidh é a stóráil in eagar ar an chruach, ach ba mhaith linn a fhios cé chomh fada is go bhfuil an eagar ag dul a bheith nuair a dhearbhú. Mar an gcéanna, más mian linn a chur ar an gcarn, ní mór dúinn chun pas a malloc líon na mbeart ba mhaith linn a chur in áirithe, ach tá sé seo dodhéanta. Tá aon smaoineamh cé mhéad carachtair a bheidh an t-úsáideoir cineál i roimh an t-úsáideoir nach iarbhír cineál iad. Tá réiteach naive ar an bhfadhb a chur in áirithe ach smután mór de spás, a rá, bloc de 1000 chars don úsáideoir ionchur, ag glacadh leis riamh go mbeadh an t-úsáideoir cineál i teaghrán go fada. Is é an smaoineamh dona ar dhá chúis. Gcéad dul síos, ag glacadh leis go úsáideoirí ghnáth ní féidir cineál i teaghráin go fada, d'fhéadfaí tú a dramhaíl a lán de chuimhne. Ar meaisíní nua-aimseartha, ní a d'fhéadfadh a bheith seo le ceist má dhéanann tú é seo i gceann amháin nó dhá chás iargúlta, ach má tá tú ag cur úsáideora ionchur i lúb agus a stóráil lena n-úsáid ina dhiaidh sin, is féidir leat a tarraing suas go tapa a ton de chuimhne. Ina theannta sin, má tá an clár tú ag scríobh do ríomhaire níos lú - gléas cosúil le smartphone nó rud éigin eile le cuimhne teoranta - Beidh an réiteach fadhbanna a lán níos tapúla. Is é an dara, cúis níos tromchúisí go dtí méid nach é seo a dhéanamh go bhfágann sé do chlár leochaileacha leis an méid ar a dtugtar ionsaí thar maoil maolán. I gcláir, tá maolán cuimhne a úsáidtear chun a stóráil go sealadach sonraí a ionchur nó aschuir, atá sa chás seo ár n-1000-Char bloc. Tarlaíonn thar maoil maolán nuair a dhéanfar sonraí scríofa anuas ar an deireadh an bhloic. Mar shampla, má dhéanann úsáideoir iarbhír cineál i níos mó ná 1000 chars. D'fhéadfá a bhfuil taithí acu seo trí thimpiste nuair a cláir le arrays. Má tá tú le sraith de 10 ints, stopann rud tú ó iarraidh a léamh nó a scríobh o 15ú. Níl aon rabhaidh Tiomsaitheoir nó earráidí. An clár blunders ach díreach ar aghaidh agus bhfuil teacht an chuimhne nuair is cuí léi a bheidh an slánuimhir an 15ú bheidh, agus is féidir é seo do athróga eile forscríobh. Sa chás is measa, is féidir leat scríobh roinnt de do chláir inmheánacha meicníochtaí rialaithe, is cúis le do chlár a fheidhmiú iarbhír treoracha éagsúla ná beartaithe agat. Anois, nach bhfuil sé coitianta chun é seo a dhéanamh de thaisme, ach tá sé seo le teicníc coitianta go leor go n-úsáideann guys dona le cláir a bhriseadh agus a chur cód mailíseach ar dhaoine eile ríomhairí. Dá bhrí sin, ní féidir linn a úsáid ach ár réiteach naive. Ní mór dúinn ar bhealach chun cosc ​​a chur ar ár gclár as a bheith i mbaol chun ionsaí Maolán overflow. Chun seo a dhéanamh, is gá dúinn a chinntiú gur féidir lenár Maolán fás de réir mar a léigh muid ionchur níos mó as an t-úsáideoir. An réiteach? Bainimid úsáid as maolán leithdháileadh gcarn. Ós rud é is féidir linn a Athraigh baint úsáide as é an Athraigh an fheidhm realloc, agus a choinneáil orainn súil a dhá uimhir - an t-innéacs na sliotán chéad folamh i maolán agus fad nó le hinniúlacht an maolán. Léaghthar san carachtair ón úsáideoir amháin ag an am ag baint úsáide as an fheidhm fgetc. Is tagairt í don teaghrán ionchur caighdeánach, - an argóint Bíonn an fheidhm fgetc - stdin a bhfuil cainéal ionchur preconnected a úsáidtear a aistriú chuig an úsáideora ionchur an gcríochfort ar an gclár. Aon uair an t-úsáideoir cineálacha i carachtar nua, a sheiceáil muid a fheiceáil má tá an innéacs an sliotán eile saor in aisce móide 1 níos mó ná an cumas an maolán. An 1 thagann i toisc go bhfuil má tá an t-innéacs seo chugainn saor in aisce 5, ansin ní mór a bheith ar ár maolán ar fad 6 a bhuíochas sin do 0 innéacsú. Má tá muid siúl as an spás sa Maolán, ansin iarracht muid a athrú é, dhúbailt ionas go leagaimid síos ar an méid uaireanta go bhfuil muid Athraigh má tá an t-úsáideoir a chlóscríobh i teaghrán i ndáiríre fada. Má tá an teaghrán gotten ró-fhada nó má reáchtáil againn as cuimhne gcarn, saor in aisce ar ár maolánacha agus null ar ais. Ar deireadh, cuir muid ar an ruabhreac ar an maolán. Chomh luath agus an amas úsáideora isteach nó filleadh, comharthaíocht ar líne nua, nó speisialta Char - rialú d - a comharthaí ag deireadh na ionchur, a dhéanann muid seiceáil a fheiceáil má tá an t-úsáideoir clóscríofa i ndáiríre i rud ar bith ar chor ar bith. Mura bhfuil, ar ais dúinn faoin margadh saothair. Seachas sin, toisc go bhfuil ár n-maolán is dócha níos mó ná ní mór dúinn, i gcás is measa tá sé beagnach dhá uair chomh mór is gá dúinn ó againn a dhúbailt gach uair Athraigh againn, a dhéanamh linn cóip nua ar an teaghrán ag baint úsáide as ach an méid spáis a theastaíonn uainn. Cuir muid ar 1 breise ar an nglaoch malloc, ionas go níl spás le haghaidh an carachtar speisialta nialasach Críochnaitheoir - an \ 0, a iarcheangail muid go dtí an teaghrán nuair a chóipeáil againn sa chuid eile de na carachtair, ag baint úsáide as strncpy ionad strcpy ionas gur féidir linn a shonrú go díreach cé mhéad carachtair ba mhaith linn a chóipeáil. Strcpy cóipeanna go dtí amas sé ar \ 0. Ansin againn saor in aisce ar ár maolánacha agus an chóip ar ais chuig an té atá ag glaoch. Cé a fhios d'fhéadfadh feidhm den sórt sin simplí-seeming a bheith casta mar sin? Anois tá a fhios agat cad a théann isteach sa leabharlann CS50. Is é mo ainm Nate Hardison, agus tá sé seo CS50. [CS50.TV]