[Powered by Google Translate] [విభాగం 5: తక్కువ సౌకర్యవంతమైన]
[నేట్ Hardison, హార్వర్డ్ విశ్వవిద్యాలయం]
[ఈ CS50 ఉంది.] [CS50.TV]
కాబట్టి guys, స్వాగతము.
విభాగం 5 స్వాగతం.
ఈ సమయంలో, క్విజ్ 0 పూర్తిచేసిన మరియు మీరు చేసిన ఎలా చూడటం ద్వారా,
నేను చాలా ఈ విభాగంలో స్కోర్ ముగ్ధులయ్యారు ఎందుకంటే ఆశాజనక మీరు మంచి అనుభూతి.
మా ఆన్లైన్ ప్రేక్షకులకు, మేము ప్రశ్నలు ఒక జంట కలిగి చేసిన
సమస్య సెట్ లో చివరి రెండు సమస్యల గురించి - లేదా క్విజ్ న కాకుండా.
కాబట్టి మేము ప్రతి ఒక్కరి ఏం జరిగిందో చూసే కాబట్టి నిజంగా త్వరగా ఆ వెళ్ళి చూడాలని
మరియు కేవలం పరిష్కారం కూడా చూసే కంటే వాస్తవ పరిష్కారం ద్వారా వెళ్ళడానికి ఎలా.
మేము, నిజంగా త్వరగా సమస్యలు గత రెండు వెళ్ళి కు 32 మరియు 33 వెళుతున్న.
జస్ట్, మళ్ళీ, కాబట్టి ఆన్లైన్ వీక్షకులు ఈ చూడగలరు.
>> మీరు పేజీ 13 న, మీ సమస్య 32, ఆశ్రయించారు ఉంటే
16 లో 13, సమస్య 32 అన్ని మార్పిడులు గురించి ఉంది.
ఇది రెండు పూర్ణాంకాల ఇచ్చిపుచ్చుకోవడంతో గురించి అన్ని ఉంది.
ఇది మేము ఉపన్యాసంలో సార్లు రెండు దాటి భావిస్తున్నట్టు సమస్య.
మరియు ఇక్కడ, మనం మీరు అడగటం జరిగింది శీఘ్ర మెమరీ TRACE ఉంది.
వారు స్టాక్ ఉన్నాయి వంటి వేరియబుల్స్ యొక్క విలువలు పూరించడానికి
కోడ్ ఈ swap చర్య ద్వారా వెళుతూ.
ముఖ్యంగా, మనం వద్ద చూస్తున్న - I'm ఈ ఐప్యాడ్ అణిచివేసేందుకు వెళ్లి -
ముఖ్యంగా, మనం వద్ద చూస్తున్న ఈ లైన్ ఇక్కడ 6 కుడి సంఖ్య ఉంది.
మరియు అది మునుపటి సమస్య కేవలం దగ్గర సంబంధం కోసం 6 సంఖ్య యొక్క.
మనం చేయాలనుకుంటున్నారా మెమరీ స్థితిని ప్రదర్శిస్తుంది లేదా లేబుల్
అది మేము ఈ లైన్ సంఖ్య 6 అమలు సమయంలో ఉంది, వంటి
దీని ద్వారా ఇక్కడే మా swap ఫంక్షన్ నుండి రాబడి.
మేము ఇక్కడ స్క్రోల్ డౌన్ ఉంటే, మేము మెమరీలో ప్రతిదీ చిరునామాలు మాకు అందించిన గమనించాను.
ఈ చాలా కీ; మేము ఒక క్షణం లో అది తిరిగి వచ్చి ఉంటుంది.
మరియు దిగువకు ఇక్కడ దిగువన, మేము చూడండి చూడాలని ఉద్దేశ్యంతో ఒక చిన్న మెమొరీ రేఖాచిత్రం వచ్చింది.
నిజానికి నా ఐప్యాడ్ న ఈ అవ్ట్ సాధించారు.
కాబట్టి నేను సూచన కోసం ఐప్యాడ్ మరియు ఈ కోడ్ మధ్య ముందుకు వెనుకకు కుడికి వెళుతున్న.
>> ప్రారంభిద్దాం. మొదటి, కుడి ఇక్కడ ప్రధాన రేఖలు మొదటి జంట దృష్టి తెలియజేయండి.
ప్రారంభించడానికి, మేము 2 1 మరియు y కు x ప్రారంభించడం వెళుతున్న.
మేము రెండు ఇంటిజర్ వేరియబుల్స్ ఉన్నాయి కాబట్టి, అవి స్టాక్ ఉంచుతారు చూడాలని రెండు.
మేము వాటిని ఒక 1 మరియు ఒక 2 ఉంచారు చూడాలని.
నా ఐప్యాడ్ కు కుదుపు చేస్తే, ఆశాజనక, యొక్క చూసేలా -
ఆపిల్ TV సాదృశ్యాన్ని, మరియు అక్కడ మేము వెళ్ళి. సరే.
నా ఐప్యాడ్ కు కుదుపు అయితే,
నేను 2 1 మరియు y కు x ప్రారంభించడం మీరు.
మేము x మార్క్ బాక్స్ లో 1 వ్రాయడం ద్వారా చాలా సులువుగా అలా
మరియు బాక్స్ లో 2 Y మార్క్. నిరాడంబర.
కాబట్టి ఇప్పుడు యొక్క ల్యాప్టాప్ తిరిగి వెళ్ళడానికి వీలు, తర్వాత ఏమి చూడండి.
విషయాలు గమ్మత్తైన చోటే కాబట్టి ఈ తదుపరి లైన్.
మేము పారామితులు వంటి x యొక్క చిరునామా మరియు y యొక్క చిరునామా పాస్ swap కు ఒక అండ్ బి.
x మరియు y యొక్క చిరునామా చిరునామా మేము లెక్కించలేకపోతున్నాము ఆ విషయాలు
ఈ బుల్లెట్ సూచిస్తూ లేకుండా ఇక్కడ కుడి డౌన్ చూపాడు.
మరియు అదృష్టవశాత్తూ, మొదటి రెండు బుల్లెట్ పాయింట్స్ సమాధానాలు సరిగ్గా మాకు చెప్పండి.
మెమరీలో x యొక్క చిరునామా 10, మరియు మెమరీలో y యొక్క చిరునామా 14.
కాబట్టి ఆ అందించబడింది పొందుతారు విలువలు ఒక మరియు మా swap ఫంక్షన్ లో టాప్ బి.
మరలా, మా చిత్రంలో తిరిగి మార్పిడి, నేను ఒక 10 రాయడం
బి లో మరియు ఒక 14.
మేము swap కొనసాగండి పేరు ఇప్పుడు, ఈ విషయం.
కాబట్టి, మళ్ళీ ల్యాప్టాప్ తిరిగి వేగంగా కదలటం
మేము swap పనిచేస్తుంది మార్గం tmp ఒక మరియు స్టోర్ ఫలితంగా నేను మొదటి dereference అని చూడండి.
కాబట్టి dereference ఆపరేటర్లు హే ", అన్నారు. ఒక చిరునామా వంటి వేరియబుల్ ఒక విషయాలు ట్రీట్.
ఆ చిరునామా వద్ద నిల్వ ఏమైనా వెళ్ళి, అది లోడ్. "
ఏం మీరు వేరియబుల్ నుండి లోడ్ మా tmp వేరియబుల్ లోకి నిల్వ అన్నారు.
ఐప్యాడ్ తిరిగి వేగంగా కదలటం.
మేము 10 చిరునామాకు వెళ్లు ఉంటే, మేము చిరునామా 10 varible x అని తెలుసు
మేము మెమరీలో x యొక్క చిరునామా 10 అని మా తూటా బిందువు చెప్పాడు ఎందుకంటే.
కాబట్టి మేము, మేము మా ఐప్యాడ్ న చూడుము, అక్కడికి వెళ్లేందుకు 1 ఇది దాని విలువ, పొందవచ్చు
మరియు ఆ tmp లోకి లోడ్.
మళ్ళీ, ఈ ఫైనల్ విషయాలు కాదు.
మేము నడవడానికి వెళుతున్న మరియు మేము చివరిలో కార్యక్రమం మా చివరి రాష్ట్రం చూస్తారు.
కానీ ఇప్పుడు, మేము tmp నిల్వ విలువ 1 ఉన్నాయి.
>> మరియు ఇక్కడ ఒక శీఘ్ర ప్రశ్న ఉంది.
[అలెగ్జాండర్] dereference ఆపరేటర్ - కేవలం వేరియబుల్ ముందు స్టార్ రైట్?
>> అవును. , మేము మరోసారి మా ల్యాప్టాప్ తిరిగి ఫ్లిప్ వంటి, dereference ఆపరేటర్లు కాబట్టి
కుడివైపు ముందు ఈ నక్షత్రం.
ఈ కోణంలో, ఇది - మీరు గుణకారం ఆపరేటర్లు తో కాంట్రాస్ట్
రెండు విషయాలు అవసరం; dereference ఆపరేటర్లు ఒక unary ఆపరేటర్లు ఉంది.
ఒక బైనరీ ఆపరేటర్లు వ్యతిరేకంగా ఒక విలువ దరఖాస్తు,
మీరు రెండు వేర్వేరు విలువలకు వర్తిస్తాయి.
కాబట్టి ఈ లైన్ లో ఏమి ఉంది.
మేము విలువ 1 లోడ్ మరియు మా తాత్కాలిక పూర్ణాంక వేరియబుల్ గా నిల్వ.
తదుపరి లైన్, మేము లోకి బి విషయాలు నిల్వ -
లేదా, బదులుగా, మేము బి ఒక సూచించే కౌంటీ స్థానంలో కు సూచిస్తుంది ఆ విషయాలు నిల్వ.
మేము కుడి నుండి ఈ విశ్లేషించడానికి ఉంటే, మేము, dereference బి వెళ్ళే
మేము 14 పరిష్కరించడానికి వెళ్తున్నారు, మేము, లేదు అని పూర్ణాంక పట్టుకోడానికి వెళ్తున్నారు
మరియు తర్వాత మేము, చిరునామా 10 వెళ్ళడానికి వెళ్తున్నారు
మరియు మేము ఆ అంతరిక్షంలోకి బి మా dereference ఫలితంగా విసిరే వెళ్తున్నారు.
మేము ఈ కొంచెం కాంక్రీటును తయారు చేయగల మా ఐప్యాడ్, తిరిగి వేగంగా కదలటం,
నేను ఇక్కడ చిరునామాలు అన్ని సంఖ్యలు వ్రాయడానికి ఉంటే అది మాకు సహాయపడే.
కాబట్టి మేము y వద్ద, మేము చిరునామా 14 లో ఉన్నాయి తెలుసు, x చిరునామా 10 వద్ద ఉంది.
మేము బి వద్ద మొదలు, మేము dereference బి, మేము విలువ 2 పట్టుకొను చూడాలని.
మేము ఆ చిరునామా వద్ద 14 నివసిస్తుంది విలువ ఎందుకంటే ఈ విలువ పట్టుకోడానికి వెళ్తున్నారు.
మరియు మేము, చిరునామా 10 వద్ద నివసిస్తుంది వేరియబుల్ ఉంచారు చూడాలని
ఇది మా వేరియబుల్ x అనుగుణంగా, కుడి ఉంది.
కాబట్టి మేము ఇక్కడ తిరిగి రాయటం యొక్క కొద్దిగా చేయవచ్చు
మేము మా 1 వదిలించుకోవటం మరియు బదులుగా మేము ఒక 2 వ్రాయండి పేరు.
కాబట్టి అన్ని మేము ఇప్పుడు భర్తీ x మీరు కూడా బాగా మరియు ప్రపంచంలో మంచి.
మేము మా tmp వేరియబుల్ x యొక్క పాత విలువ నిల్వ ఉన్నాయి.
కాబట్టి రాబోయే లైన్ తో swap పూర్తిచేయవచ్చు.
మా ల్యాప్టాప్ తిరిగి వేగంగా కదలటం.
ఇప్పుడు ఆ అవశేషాలు మా తాత్కాలిక పూర్ణాంక వేరియబుల్ విషయాలు తీసుకోవాల్సి ఉంటుంది
అండ్ బి పట్టుకున్న చిరునామా వద్ద నివసిస్తుంది వేరియబుల్ వాటిని నిల్వ.
కాబట్టి మేము వేరియబుల్ ప్రాప్తి చెయ్యడానికి సమర్థవంతంగా dereference బి చూడాలని
ఆ, బి అది చూస్తే చిరునామా ఉంది
మరియు మేము tmp దీనిని పట్టుకున్న విలువ అంశాలు చూడాలని.
మరోసారి ఐప్యాడ్ తిరిగి వేగంగా కదలటం.
నేను, ఇక్కడ 2 ఈ విలువ వేయండి చేయవచ్చు
మరియు బదులుగా మేము దీనిని 1 కుడి కాపీ చేస్తాము.
అప్పుడు కోర్సు యొక్క అమలు చేసే తదుపరి లైన్, -
మేము ల్యాప్టాప్ తిరిగి ఫ్లిప్ ఉంటే - ఈ విషయం 6
మేము మా చిత్రంలో పూర్తిగా నిండి ఉన్నాయి కోరుకున్నారు వద్ద పాయింట్ ఇది.
కాబట్టి ఐప్యాడ్ తిరిగి వేగంగా కదలటం మరోసారి, అందువల్ల మీరు, పూర్తి రేఖాచిత్రం చూడగలరు
మీరు మేము x ఒక 10, బి లో 14, tmp ఒక 1, 2, మరియు y ఒక 1 కలిగి చూడగలరు.
ఈ గురించి ఏవైనా ప్రశ్నలు ఉన్నాయా?
ఇది సంచరించింది వల్ల, మరింత అర్ధవంతం లేదు?
తక్కువ సమంజసం? ఆశాజనక లేదు. సరే.
>> గమనికలు చాలా గమ్మత్తైన విషయం.
మేము పని guys ఒకటి చాలా సాధారణ నానుడి ఉంది:
"గమనికలు అర్థం చేసుకోవడానికి, మీరు మొదటి గమనికలు అర్థం చేసుకోవాలి."
ఏ నేను చాలా నిజమైన అనుకుంటాను. ఇది ఉపయోగిస్తారు పొందడానికి సమయం చేస్తుంది.
, చాలా సహాయకారిగా ఉంటాయి, చిత్రాలు చాలా Drawing ఇలాంటి మెమరీ చిత్రములు మా గీయడం
మరియు మీరు ఉదాహరణ తర్వాత ఉదాహరణ తర్వాత ఉదాహరణ నడవడానికి తర్వాత,
అది కొంచెం సెన్స్ అండ్ కొంచెం సెన్స్ అండ్ కొంచెం తెలుస్తుంది మొదలుపెడతారు.
చివరగా, ఒక రోజు, మీరు అన్ని పూర్తిగా పట్టు కలిగి ఉంటారు.
రాబోయే సమస్య కొనసాగండి? ఏదైనా ప్రశ్నలు ముందు అన్ని కుడి.
కాబట్టి ల్యాప్టాప్ తిరిగి ఫ్లిప్.
మనం తర్వాత సమస్య సమస్య సంఖ్య 33 ఫైలు ఉంది I / O.
ఈ కొద్దిగా లో జూమ్ చెయ్యండి.
సమస్య 33 - అవును?
>> [డేనియల్] నేను త్వరగా ప్రశ్న వచ్చింది. ఈ నక్షత్రం, లేదా చుక్క,
మీరు ముందు ఒక చుక్క ఉపయోగించేటప్పుడు dereferencing అని.
మీరు ముందు ఆంపర్సండ్ చిహ్నం ఉపయోగించేటప్పుడు ఏమిటి అని?
>> ఆంపర్సండ్ చిహ్నం ముందు చిరునామా-యొక్క ఆపరేటర్.
కాబట్టి యొక్క అప్ తిరిగి స్క్రోల్ అనుమతిస్తుంది.
అయ్యో. నేను నేను నిజంగా స్క్రోల్ లేదు జూమ్ మోడ్ లో ఉన్నాను.
మేము ఇక్కడ నిజంగా త్వరగా ఈ కోడ్ విషయంలో చూస్తే,
మళ్ళీ అదే పని సంభవించే.
మేము ఇక్కడే ఈ కోడ్ విషయంలో చూస్తే, పై మేము కాల్, స్వాప్ చేయడానికి పేరు
ఆంపర్సండ్ చిహ్నం కేవలం "చిరునామా వేరియబుల్ x జీవితాలను పొందండి." అని
మీ కంపైలర్ మీ కోడ్ కూర్చింది చేసినప్పుడు,
నిజానికి భౌతికంగా జీవించడానికి మీ వేరియబుల్స్ యొక్క అన్ని మెమరీ స్థానం ఎంచుకొను ఉంటుంది.
ప్రతిదీ సంకలనం తర్వాత కాబట్టి కంపైలర్ తర్వాత, ఏమి చెయ్యగలను
అది "ఓహ్, నేను చిరునామా 10 వద్ద x ఉంచండి. నేను చిరునామా 14 వద్ద Y ఉంచండి.", తెలుసు
తర్వాత మీరు ఈ విలువలు పూరించవచ్చు.
కాబట్టి మీరు చేయవచ్చు - అది అలాగే మరియు పాస్ & పీ లో ఈ తరలిస్తారు.
, ఈ కుర్రాళ్ళు చిరునామా పొందుతారు కాని వారు కూడా, మీరు swap ఫంక్షన్ వాటిని పాస్
ఈ రకం సమాచారం ఇక్కడే ఈ Int *, కంపైలర్ చెబుతుంది
"సరే, మేము ఒక పూర్ణాంకం వేరియబుల్ యొక్క చిరునామాను ఈ చిరునామా వివరించడంలో కావడం చేస్తున్నారు."
ఒక పూర్ణాంకానికి యొక్క ఒక ప్రసంగం, ఒక పాత్ర వేరియబుల్ యొక్క చిరునామా భిన్నంగా ఉంటుంది
ఒక పూర్ణాంకానికి ఒక 32-bit కంప్యూటరులో, తీసుకుంటుంది ఎందుకంటే, స్థలం 4 బైట్లు తీసుకుంటుంది
ఒక పాత్ర మాత్రమే స్థలం 1 బైట్ అప్ చేపట్టింది.
కాబట్టి అది ఏమిటో కూడా తెలుసు ముఖ్యం - నివసిస్తున్నారు ఏమి, విలువ రకం
సైన్ జారీ అయినట్లు ఆ చిరునామా వద్ద నివసిస్తున్నారు
మీరు వ్యవహరించే చేస్తున్న లేదా చిరునామా.
ఆ విధంగా, మీరు ఎన్ని బైట్లు సమాచారం యొక్క నిజానికి మీ RAM నుండి లోడ్ తెలుసు.
ఆపై, అవును, మీ వంటి ఈ dereference ఆపరేటర్లు, అడగడం జరిగింది
వెళ్లి ఒక ఖచ్చితమైన చిరునామా కు సమాచారం ప్రాప్తి.
కనుక అది ఇది వేరియబుల్ తో అన్నారు, ఒక చిరునామా ఒక విషయాలు చికిత్స,
ఆ చిరునామా వెళ్లి, బయటకు లాగి, ఒక రిజిస్టర్ లో ప్రాసెసర్, లోడ్ లోకి లోడ్
అసలు విలువలు లేదా చిరునామా వద్ద నివసించే విషయాలు.
ప్రశ్నలేవీ? ఈ మంచి ప్రశ్నలు.
ఇది చాలా కొత్త పరిభాష యొక్క పలు అంశాలు.
ఇది వివిధ ప్రాంతాలలో & మరియు * చూడటం కూడా అల్లరిగా యొక్క ఉంటాము.
>> అన్ని కుడి.
కాబట్టి తిరిగి సమస్య 33, ఫైలు I / O.
ఈ నేను కొన్ని విషయాలను జరిగిన భావించే ఆ సమస్యలు ఒకటి.
ఒకటి, ఇది ఒక చాలా కొత్త విషయం కాదు.
ఇది క్విజ్ ముందు చాలా త్వరగా సమర్పించారు
తరువాత నేను గణిత ఆ పద సమస్యలు వాటిలో రకమైన భావిస్తే
అక్కడ వారు మీరు సమాచారం ఇచ్చాయి, కానీ మీరు దీన్ని ఒక టన్ను ఉపయోగించడానికి మాత్రమే ముగుస్తుంది లేదు.
ఈ సమస్య యొక్క మొదటి భాగం ను ఏమిటి వివరిస్తూ ఉంది.
ఇప్పుడు, ఒక CSV ఫైల్, వివరణ ప్రకారం, కామాతో వేరుచేసిన విలువలు ఫైలు.
ఈ అన్ని ఆసక్తికరమైన ఉన్నాయి కారణం, మరియు మీరు వాటిని ఉపయోగించవచ్చు కారణం,
, ఎందుకంటే, మీరు అనేక ఎప్పుడూ ఎక్సెల్ వంటి అంశాలను ఉపయోగించారు ఉంది?
బహుశా, లేదా మీ జీవితంలో ఏదో ఒక సమయంలో ఉపయోగించే మీకు చాలా చూడవచ్చు.
మీరు Excel లో లాగ ఉపయోగించండి.
ఒక ఎక్సెల్ స్ప్రెడ్ షీట్ డేటా పొందండి దానితో ప్రాసెసింగ్ ఏ విధమైన చేయడానికి,
మీరు ఒక సి కార్యక్రమం లేదా పైథాన్ ప్రోగ్రామ్ను, జావా కార్యక్రమం, రాయడం కోరుకుంటే
మీరు అక్కడ నిల్వ చేసిన డేటా పరిష్కరించేందుకు,
అది పొందడానికి అత్యంత సాధారణ మార్గాల్లో ఒకటిగా ఒక CSV ఫైల్ లో ఉంది.
మీరు, సంభాషణ 'సేవ్' వెళ్లి మరియు మీరు Excel తెరిచి ఉంటుంది
మీరు ఒక వాస్తవిక CSV ఫైల్ అవుట్ పొందవచ్చు.
>> ఈ విషయాలు ఎలా నడుచుకోవాలి అనే విషయాన్ని తెలుసుకుని ఉండడం.
ఇది పనిచేస్తుంది దానిని పోలి ఉండే ఉంటుంది - అంటే, అది తప్పనిసరిగా ఒక స్ప్రెడ్షీట్ అనే యొక్క
పేరు, మేము ఇక్కడ చూడండి వంటి చాలా మిగిలి అత్యంత ముక్క లో,
మేము అన్ని గత పేర్లు ఉన్నాయి.
కాబట్టి మేము అప్పుడు మలన్, Hardison, ఆపై బౌడెన్, MacWilliam, ఆపై చాన్ ఉన్నాయి.
అన్ని గత పేర్లు. మరియు తర్వాత కామా మొదటి పేర్లు నుండి చివరి పేర్లు విడదీస్తుంది.
డేవిడ్, నేట్, రాబ్, టామీ, మరియు Zamyla.
నేను ఎల్లప్పుడూ రాబీ మరియు టామ్ అప్ కలపాలి.
ఆపై, చివరకు, మూడవ కాలమ్ ఇమెయిల్ చిరునామాలను ఉంది.
మీరు అర్థం ఒకసారి, ప్రోగ్రామ్ యొక్క మిగిలిన అమలు చాలా సులభంగా ఉంటుంది.
మేము మా సి కార్యక్రమంలో ఈ అదే నిర్మాణాన్ని ప్రతిబింబించే చేయడానికి చేసిన ఏమిటి
మేము ఒక నిర్మాణం ఉపయోగించి ఉంది.
మేము ఈ కొంచెం ఆడటం మొదలు పెడతారేమో.
మేము నిఘంటువులు వ్యవహరించే సమయంలో సమస్య సెట్ 3, మొదటి కొద్దిగా కోసం భావించాడు.
కానీ ఈ సిబ్బంది struct ఒక చివరి పేరు, ఒక మొదటి పేరు, మరియు ఒక ఇమెయిల్ నిల్వ చేస్తుంది.
మా CSV ఫైల్ నిల్వ జరిగినది.
కాబట్టి ఈ కేవలం ఒక ఫార్మాట్ నుంచి మరొక మారిన ఉంది.
మేము, ఒక లైన్ లోకి, ఈ సందర్భంలో, ఒక సిబ్బంది struct మార్చేందుకు కలిగి
ఆ వంటి కామాతో వేరుచేసిన లైన్.
ఆ సమంజసం లేదు? మీరు అబ్బాయిలు అన్ని క్విజ్ తీసుకున్న కలిగి
నేను మీరు కనీసం ఈ ఆలోచించడానికి కొంత సమయం కలిగి ఊహించుకోండి.
>> కిరాయి ఫంక్షన్ లో సమస్య మాకు తీసుకుని అడుగుతుంది - ఈ కొద్దిగా లో we'll జూమ్ -
, పేరు తో, సిబ్బంది నిర్మాణం, సిబ్బంది struct తీసుకుని
మరియు మా staff.csv ఫైలు దాని సారములను కలపవచ్చు.
ఈ ఉపయోగించడానికి చాలా సులభంగా ఆ మారుతుంది.
మేము రకమైన కొద్దిగా ఎక్కువ ఈ విధులు రోజు చుట్టూ ప్లే ఉంటాం.
కానీ ఈ సందర్భంలో, fprintf ఫంక్షన్ నిజంగా కీ.
కాబట్టి fprintf తో, మీరు అబ్బాయిలు printf ఈ మొత్తం పదాన్ని జరిగింది వలె, ముద్రించవచ్చు.
మీరు ఒక ఫైల్ కు printf ఒక లైన్ చెయ్యవచ్చు.
బదులుగా కేవలం సాధారణ printf కాల్ చేయడానికి కాబట్టి మీరు ఫార్మాట్ స్ట్రింగ్ ఇవ్వాలని పేరు
మరియు తర్వాత మీరు, క్రింది వాదనలు తో అన్ని విషయాల్లోనూ భర్తీ
fprintf తో, మీ మొదటి వాదన బదులుగా మీరు వ్రాయాలనుకుంటున్న ఫైలు.
మేము, మనిషి fprintf, ఉదాహరణకు, పరికరంలోని ఈ కు ఉంటే
మేము printf మరియు fprintf మధ్య వ్యత్యాసం చూడగలరు.
నేను ఇక్కడ కొద్దిగా జూమ్ చేస్తాము.
Printf తో కాబట్టి, మేము ఒక ఫార్మాట్ స్ట్రింగ్ ఇవ్వాలని, ఆపై తదుపరి వాదనలు
మా ఫార్మాట్ స్ట్రింగ్ లోకి మార్చడం లేదా ప్రత్యామ్నాయం కోసం అన్ని విషయాల్లోనూ ఉన్నాయి.
Fprintf తో అయితే, మొదటి వాదన నిజానికి ఒక ప్రవాహం అని ఈ ఫైలు * ఉంది.
>> , మా కిరాయి ఇక్కడ పైగా తిరిగి వచ్చే
మేము ఇప్పటికే మా ఫైలు * స్ట్రీమ్ మాకు ప్రారంభించారు పొందారు.
ఆ యొక్క ఈ మొదటి లైన్ ఏమి ఇది staff.csv ఫైలు తెరుస్తుంది,
అది append మోడ్ లో తెరిచినప్పుడు, మాకు లేవు మిగిలిన అన్ని ఉంటుంది
ఫైలు సిబ్బందిని నిర్మాణం వ్రాయండి.
మరియు, నేను ఐప్యాడ్ ఉపయోగించడానికి చెయ్యాలనుకుంటున్నారు, యొక్క చూసేలా?
నేను ఐప్యాడ్ ఉపయోగించండి. మేము తప్ప కలిగి - నేను కొద్దిగా మెరుగ్గా వ్రాయడానికి కాబట్టి పట్టిక ఈ ఉంచారు లెట్స్ -
కిరాయి రద్దు మరియు ఇది ఒక వాదన లో s అనే సిబ్బంది నిర్మాణం జరుగుతుంది.
మా జంట కలుపులు గాట్, మేము, ఫైలు అని మా ఫైలు * పొందారు
మేము, మాకు ఇచ్చిన మా fopen లైన్ కలిగి
అది pedia ఇప్పటికే నుండి మరియు నేను చుక్కలు వంటి వ్రాయుటకు చేస్తాము.
మరియు తర్వాత మా తదుపరి లైన్, మేము fprintf ఒక కాల్ చూడాలని
మరియు మేము, మేము ముద్రించవచ్చు చేయదలిచిన ఫైలులో పాస్ చూడాలని
తరువాత మా ఫార్మాట్ స్ట్రింగ్, ఇది -
నేను మీరు అబ్బాయిలు ఇది అలా కనిపిస్తుంది చెప్పు నాకు తెలియజేస్తాము.
ఎలా మీరు గురించి, స్టెల్లా? మీరు ఫార్మాట్ స్ట్రింగ్ యొక్క మొదటి భాగం ఎలా తెలుసు?
[స్టెల్లా] నాకు ఖచ్చితంగా తెలియదు. >> జిమ్మీ అడగండి సంకోచించకండి.
మీరు, జిమ్మీ తెలుసా?
[జిమ్మీ] ఇది గత ఉంటుందా? నాకు తెలీదు. నేను పూర్తిగా తెలియదు.
సరే >>. ఎలా, ఎవరైనా పరీక్షలో ఈ సరైన వచ్చింది?
అన్ని కుడి కావచ్చు.
ఇది ఇక్కడ మేము అన్ని మేము మా సిబ్బంది నిర్మాణం యొక్క ప్రతి భాగం కావలసిన అని అవుతుంది
మా ఫైల్లోకి స్ట్రింగ్ వలె ముద్రించే అవకాశం.
మేము ఒక చివరి పేరు ఎందుకంటే మేము స్ట్రింగ్ ప్రత్యామ్నాయం పాత్ర మూడు వేర్వేరు సమయాల్లో ఉపయోగించే
కామా, ఆ తర్వాత ఒక మొదటి పేరు, కామాతో తరువాత
మరియు తర్వాత చివరకు ఇది ఇమెయిల్ చిరునామా ఉంటుంది - కాదు
నా తెరపై అమర్చడం - కానీ ఒక NEWLINE పాత్ర తరువాత మాత్రమే.
కాబట్టి నేను అక్కడ డౌన్ వ్రాయుటకు వెళుతున్నాను.
ఆపై, మా ఫార్మాట్ స్ట్రింగ్ తరువాత
మేము డాట్ గుర్తులను ఉపయోగించి యాక్సెస్, ఇది ప్రత్యామ్నాయాలను కలిగి
మేము సమస్య సెట్ 3 లో జరిగింది.
మేము s.last, s.first, మరియు s.email ఉపయోగించవచ్చు
మా ఫార్మాట్ స్ట్రింగ్ వలె ఆ మూడు విలువలు లో స్థానంలో.
కాబట్టి ఆ విధంగా వెళ్ళి వచ్చింది? సమంజసం?
అవును? కాదు? బహుశా? సరే.
>> మేము ముద్రించిన చేసిన మరియు మేము మా మోపడం తర్వాత తర్వాత మేము అంతిమ విషయం:
మేము ఒక ఫైలు తెరిచిన వెంటనే, మనం ఎల్లప్పుడూ మూసి గుర్తుంచుకోండి.
లేకుంటే మేము మెమరీ లీకింగ్ ముగుస్తుంది చేస్తాము కాబట్టి,
ఫైలు సూచికలు అప్ ఉపయోగించి.
కాబట్టి మేము ఇది ఫంక్షన్ ఉపయోగించగలను, అది మూసి? డేనియల్?
[డేనియల్] fclose? సరిగ్గా >> fclose.
కాబట్టి ఈ సమస్య యొక్క చివరి భాగం, fclose ఫంక్షన్ను ఉపయోగించి, ఫైలు సరిగ్గా దగ్గరగా ఉంది
ఇది ఆ కనిపిస్తోంది.
చాలా క్రేజీ లేదు.
కూల్.
కాబట్టి ఆ క్విజ్ లో సమస్య ఉంది 33.
మేము I / O వస్తోంది ఖచ్చితంగా మరింత ఫైలు ఉంటుంది.
ఈనాడు నేడు ఉపన్యాసంలో కొద్దిగా మరింత, లేదా విభాగంలో చేస్తాము
ఈ రాబోయే pset అత్యధిక ఏర్పాటు చేయడానికి ఏమి ఉండటం దీనికి కారణాలు.
యొక్క ఈ సమయంలో క్విజ్ నుండి బయటపడేందుకు లెట్. అవును?
>> [షార్లెట్]] ఎందుకు బదులుగా fclose యొక్క fclose (ఫైలు) (staff.csv)?
>> ఆహ్. ఆ అవుతుంది ఎందుకంటే - అలా ప్రశ్న, ఒక గొప్ప ఒకటి ఉంది,
ఎందుకు, మేము fclose వ్రాస్తున్నప్పుడు, మేము fclose (ఫైలు) స్టార్ వేరియబుల్ వ్రాస్తున్న ఉంది
ఫైలు పేరు, staff.csv వ్యతిరేకంగా? ఆ సరైనదేనా? అవును.
కాబట్టి యొక్క పరిశీలించి అనుమతిస్తుంది. నా లాప్టాప్ తిరిగి మారవచ్చు ఉంటే,
మరియు యొక్క fclose ఫంక్షన్ చూద్దాం.
కాబట్టి, fclose ఫంక్షన్ ప్రవాహం మూసుకుంటుంది మరియు మేము దగ్గరగా చేయదలిచిన స్ట్రీమ్కు పాయింటర్ లో పడుతుంది
వంటి మేము మూసివేయాలని మీరు అనుకుంటున్నారా నిజమైన ఫైల్ పేరు వ్యతిరేకంగా.
మరియు ఈ కారణంగా తెర వెనుక, మీరు fopen ఒక కాల్ చేసినపుడు, ఉంది
మీరు ఒక ఫైల్ అప్ తెరిచినప్పుడు, మీరు నిజంగా ఫైల్ గురించి సమాచారాన్ని నిల్వ చేయడానికి మెమరీ పెడుతోంది చేస్తున్నారు.
కాబట్టి మీరు, ఫైలు గురించి సమాచారాన్ని కలిగి ఉంది ఫైల్ పాయింటర్ కలిగి
అది తెరవబడి అందుకని, మీరు ఫైలు ప్రస్తుతం ఎక్కడ దాని పరిమాణం,
మీరు చదివే మరియు ఫైలులోని నిర్దిష్ట ప్రాంతానికి కాల్స్ రాయడం తయారు చేయవచ్చు.
బదులుగా మీరు ఫైల్ పేరు మూసివేయడం యొక్క పాయింటర్ మూసివేయడం ముగుస్తుంది.
>> అవును? [డేనియల్] కాబట్టి కిరాయి ఉపయోగించడానికి, మీరు చెప్పిన విధంగా - అది ఎలా వినియోగదారు ఇన్పుట్ను పొందండి లేదు?
Fprintf ఇది వినియోగదారు ఇన్పుట్ కోసం వేచి ఉంటాం కోణంలో GetString ప్రవర్తిస్తాయి లేదు
మరియు మీరు ఈ టైప్ అడగండి - లేదా మీరు ఈ మూడు విషయాలు టైప్ కోసం వేచి?
లేదా మీరు బాడుగ అమలు ఏదో ఉపయోగించడానికి చేయాలి?
>> అవును. కాబట్టి మేము కావు - ప్రశ్న, ఎలా మేము వినియోగదారు ఇన్పుట్ ఎలా జరిగింది
కిరాయి అమలు చేయడానికి? మరియు మేము ఇక్కడ ఉన్నాయి, కిరాయి యొక్క కాలర్ ఉంది
ఇప్పటికే struct నిల్వ డేటా అన్ని ఈ సిబ్బంది struct లో ఆమోదించింది.
కాబట్టి fprintf కేవలం ఫైల్ నేరుగా ఆ డేటా వ్రాయడానికి చేయవచ్చు.
ఏ వినియోగదారు ఇన్పుట్ కోసం ఉన్నాయి.
ఇప్పటికే సరిగా ఈ సిబ్బంది struct లో ఉంచడం ద్వారా ఇన్పుట్ అందించిందని.
ఆ గమనికలు ఏ శూన్య అయితే మరియు వస్తువుల కోర్సు యొక్క, బ్రేక్, అని
కాబట్టి మేము ఇక్కడ తిరిగి స్క్రోల్ మరియు మేము మా struct చూడండి.
మేము స్ట్రింగ్ ఆఖరి స్ట్రింగ్ మొదటి, స్ట్రింగ్ ఇమెయిల్ లేదు.
మేము ఇప్పుడు ఆ నిజంగా అన్ని దీనిలోనే, చార్ * వేరియబుల్స్ ఉన్నాయని తెలుసుకోండి.
ఆ శూన్యం సూచించే పోవచ్చు లేదా.
వారు, కుప్ప మెమరీ సూచించే అవకాశం
స్టాక్ న బహుశా మెమరీ.
మేము తెలుసుకుని, కానీ ఈ గమనికలు ఏ శూన్య, లేదా చెల్లని ఉంటే లేదు
ఖచ్చితంగా మా కిరాయి ఫంక్షన్ క్రాష్ మేము ఆ.
ఆ పరీక్ష పరిధి దాటి రకమైన అని ఏదో ఉంది.
మేము దాని గురించి చింతించడం లేదు.
గ్రేట్. సరే. కాబట్టి క్విజ్ నుండి కదిలే.
>> యొక్క ఈ గై దగ్గరగా లెట్, మరియు మేము pset 4 కు వెళుతున్న.
మీరు అబ్బాయిలు pset స్పెక్ చూడండి అయితే, ఒకసారి మీరు దాన్ని ఆక్సెస్ చెయ్యవచ్చు, cs50.net/quizzes,
మేము విభాగం సమస్యలు నేడు కొన్ని ద్వారా వెళ్ళడానికి వెళ్తున్నారు.
నేను క్రింద స్క్రోలింగ్ ఉన్నాను - ప్రశ్నలు యొక్క విభాగం pset వివరాల మూడవ పేజీ ప్రారంభమవుతుంది.
మరియు మొదటి భాగం రీడైరెక్ట్ మరియు పైప్సులోని వెళ్ళి చిన్న చూడటానికి అడుగుతుంది.
ఒక చల్లని చిన్న రకం, ఇది మీరు ఉపయోగించే కొన్ని కొత్త, చల్లని కమాండ్ లైన్ ఉపాయాలు చూపిస్తుంది.
మరియు తర్వాత మేము అలాగే మీరు కొన్ని ప్రశ్నలు పొందారు.
ప్రవాహాలు ఈ మొదటి ప్రశ్న, printf సిద్ధంగా రాశారు ఏ,
మేము ఒక విధమైన క్షణం క్రితం కేవలం కొద్దిగా న తాకిన.
మేము కేవలం చర్చిస్తున్నారు ఈ fprintf దాని వాదన వంటి ఫైల్ * స్ట్రీమ్లో పడుతుంది.
fclose, అలాగే ఒక ఫైల్ * స్ట్రీమ్లో పడుతుంది
మరియు fopen తిరిగి విలువ అదే మీరు ఒక ఫైల్ * స్ట్రీమ్ ఇస్తుంది.
మేము printf విచారించింది చేసినప్పుడు మేము ముందు ఆ చూడని కారణం
printf డిఫాల్ట్ స్ట్రీమ్ కలిగి ఉంది.
మరియు అది వ్రాస్తాడు ఏ డిఫాల్ట్ స్ట్రీమ్
మీరు స్వేచ్ఛగా గురించి పొందుతారు.
కాబట్టి ఖచ్చితంగా అది చూసి.
>> నేటి విభాగంలో, మేము, GDB గురించి కొద్దిగా మాట్లాడాలని వెళుతున్న
మరింత చేరువైన మీరు దానితో ఎందుకంటే, మరింత సాధన మీరు దానిని పొందండి
మంచి సామర్థ్యం మీరు నిజంగా మీ స్వంత కోడ్ దోషాలు వేటాడి ఉంటాం.
ఈ అద్భుతంగా అప్ డీబగ్గింగ్ ప్రక్రియ వేగం చేస్తుంది.
కాబట్టి printf ఉపయోగించి, ప్రతి మీరు, మీ కోడ్ మళ్ళీ కంపైల్ చెయ్యండి ఉంటుంది అలా
మీరు మళ్ళీ దాన్ని అమలు చేయాలి, కొన్నిసార్లు మీరు, చుట్టూ printf కాల్ తరలించడానికి కలిగి
కోడ్ అవుట్ మీరే అది అయితే పడుతుంది.
మా లక్ష్యం ప్రయత్నించండి మరియు GDB తో, మీరు తప్పనిసరిగా చేస్తాడు మీరు ఒప్పించేందుకు ఉంది
printf మీ కోడ్ లో ఏ సమయంలో నైనా ఏదైనా మరియు మీరు మళ్ళీ కంపైల్ చెయ్యండి అవసరం లేదు.
మీరు ప్రారంభించడానికి మరియు printf తదుపరి ఊహించడం ఉంచడానికి లేదు.
ఇది మొదటి విషయం ఈ పంక్తి కాపీ మరియు వెబ్ యొక్క విభాగం కోడ్ ఆఫ్ పొందడానికి ఉంది.
నేను "wget ​​http://cdn.cs50.net", అని ఈ కోడ్ యొక్క లైన్ కాపీ చేస్తున్నాను.
నేను కాపీ వెళుతున్న.
నా ఉపకరణం కు వెళ్ళి వెళుతున్న, కాబట్టి మీరు, నేను మీరు చూడవచ్చు దూరంగా
అక్కడ లో అతికించి, మరియు నేను ఎంటర్ కొట్టాడు, ఈ wget ఆదేశం వాచ్యంగా ఒక వెబ్ పొందండి ఉంది.
ఇది, ఇంటర్నెట్ యొక్క ఈ ఫైలు ఆఫ్ లాగేందుకు వెళుతున్న
మరియు ప్రస్తుత డైరెక్టరీ అది సేవ్ జరగబోతోంది.
నా ప్రస్తుత డైరెక్టరీ జాబితా ఉంటే ఇప్పుడు మీరు నేను అక్కడ ఈ section5.zip ఫైలు పొందారు చూడగలరు.
వ్యక్తివి పరిష్కరించేందుకు మార్గం, ఇది అన్జిప్ ఉంది
మీరు ఈ వంటి కమాండ్ లైన్ లో చేయవచ్చు.
Section5.zip.
అది అన్జిప్ మేము, నాకు ఫోల్డర్ సృష్టించడం
అన్ని కంటెంట్లను పెంచి, అక్కడ వాటిని ఉంచండి.
కాబట్టి ఇప్పుడు నేను CD ఆదేశాన్ని ఉపయోగించి నా విభాగం 5 డైరెక్టరీలో వెళ్ళవచ్చు.
స్పష్టమైన ఉపయోగించి తెరపై క్లియర్ చేయండి. కాబట్టి స్క్రీన్ క్లియర్.
ఇప్పుడు నేను పరిష్కరించేందుకు ఒక nice క్లీన్ టెర్మినల్ పొందారు.
>> నేను ఈ డైరెక్టరీ లో చూసే అన్ని ఫైళ్ళు, జాబితా ఇప్పుడు ఉంటే
buggy1, buggy2, buggy3, మరియు buggy4: మీరు నేను నాలుగు ఫైళ్ళు పొందారు చూడండి.
నేను కూడా వాటి సంబంధిత. సి ఫైళ్లను పొందారు.
మేము ఇప్పుడు కోసం. సి ఫైళ్లను కు వెళ్ళి లేదు.
బదులుగా, మేము GDB తెరవడం వాటిని ఉపయోగించడానికి చూడాలని.
మేము GDB ఉపయోగించే మేము, మేము అసలు సోర్స్ కోడ్ ప్రాప్తి తద్వారా వారి చుట్టూ ఉంచిన చేసిన
కానీ విభాగం యొక్క ఈ భాగం యొక్క లక్ష్యం GDB తో చుట్టూ టింకర్ ఉంది
మరియు మేము ఈ నాలుగు బగ్గీ కార్యక్రమాలు ప్రతి తప్పు ఏమి గుర్తించడానికి దాన్ని ఉపయోగించవచ్చు ఎలా.
కాబట్టి, మనం కేవలం నిజంగా త్వరగా గది చుట్టూ చూడాలని
మరియు నేను, బగ్గీ కార్యక్రమాలు ఒకటి అమలు చేయడానికి ఎవరైనా అడగవచ్చు వెళుతున్న
తరువాత, మేము GDB ద్వారా సమూహం వంటి వెళ్తారో, మరియు మేము ఈ కార్యక్రమాలు పరిష్కరించడానికి చెయ్యగలరు చూస్తారు
లేదా కనీసం వాటిని ప్రతి తప్పు ఏమి గుర్తించడానికి.
డేనియల్ ఇక్కడ పైగా ప్రారంభిద్దాం. మీరు buggy1 రన్ చేస్తుంది? ఏమి చూద్దాం.
[డేనియల్] ఇది ఒక అనువర్తనం లోపం ఉంది అన్నారు. >> అవును. సరిగ్గా.
నేను buggy1 అమలు చేస్తే, నేను ఒక seg లోపం పొందండి.
ఈ సమయంలో, నేను, వెళ్ళి buggy1.c ప్రారంభం కాలేదు
, ప్రయత్నించండి మరియు తప్పు ఏమి గుర్తించడానికి
కానీ ఈ seg తప్పు తప్పు గురించి చెడ్డ విషయాలు ఒకటి
ఈ కార్యక్రమం విషయాలను లైన్ వాస్తవానికి తప్పు జరిగింది మరియు విరిగింది ఏం తెలుస్తుంది ఉండదు.
మీరు రకమైన కోడ్ కు కలిగి
మరియు అంచనా ఉపయోగించి గుర్తించడానికి మరియు తనిఖీ లేదా printf తప్పు ఏమి చూడటానికి.
GDB గురించి చక్కని విషయాలను ఒకటి ఇది నిజంగా సులభం
లైన్ గుర్తించడానికి ఇది మీ ప్రోగ్రామ్ క్రాష్ వద్ద.
ఇది పూర్తిగా కూడా ఆ కోసం, అది దానిని ఉపయోగించడానికి ఉపయోగకరమని.
కాబట్టి GDB అప్ బూట్, నేను GDB టైప్ చేసి, ఆపై నేను అమలు చేయడానికి కావలసిన executable దానిని మార్గం ఇస్తాయి.
ఇక్కడ నేను GDB ./buggy1 టైప్ చేస్తున్నానని.
ఎంటర్ నొక్కండి. నాకు ఈ కాపీరైట్ సమాచారం ఇస్తుంది
మరియు డౌన్ ఇక్కడ మీరు ", / home / చదవడం చిహ్నాలు అని ఈ లైన్ చూస్తారు
jharvard/section5/buggy1. "
అన్ని బాగా వెళుతుంది ఉంటే మీరు ఈ వలె కనిపించే ఒక సందేశాన్ని ముద్రించండి చూస్తారు.
ఇది చిహ్నాలు చదివెదను, అది "నేను, మీ ఎక్జిక్యూటబుల్ ఫైల్ నుండి చిహ్నాలు వింటున్నాను" అని మీరు
మరియు అప్పుడు ఇక్కడ ఈ "డన్" సందేశం ఉంటుంది.
మీరు ఈ యొక్క కొన్ని ఇతర వైవిధ్యమైన చూడండి, లేదా మీరు చూసినట్లయితే, అది చిహ్నాలు దొరకలేదు
లేదా అలాంటిదే, ఏ అంటే మీరు సరిగ్గా executable సంకలనం కాని ఉంది.
మేము GDB తో ఉపయోగం కోసం కార్యక్రమాలు కంపైల్ చేసినప్పుడు, మేము, ప్రత్యేక-G జెండా ఉపయోగించాలి
మీరు మీ కార్యక్రమాలు కంపైల్ ఉంటే మరియు ఆ మనం టైప్ చేయడం ద్వారా సిద్ధంగా పూర్తి యొక్క
లేదా బగ్గి తయారు లేదా ఆ ఏ, తిరిగి తయారు.
కానీ మీరు గణగణమని ద్వని చేయు తో మానవీయంగా కంపైల్ చేస్తుంటే, అప్పుడు మీరు వెళ్ళి ఆ-G జెండా ఉన్నాయి ఉంటుంది.
>> ఈ సమయంలో, ఇప్పుడు మేము మా GDB ప్రాంప్ట్ కలిగి
ఈ కార్యక్రమం అమలు చేయడానికి చాలా సులభం.
మేము గాని పరుగుల టైపు చెయ్యవచ్చు లేదా మేము r టైప్ చెయ్యవచ్చు.
చాలా GDB ఆదేశాలను సంక్షిప్తంగా ఉంటుంది.
సాధారణంగా చాలా నైస్ ఇది కేవలం ఒకటి లేదా రెండు అక్షరాలు కు.
మీరు r టైప్ మరియు ఏమి, Enter ని చేస్తే, సాద్?
[సాద్] నేను SIGSEGV, విభజన లోపంగా, ఆపై ఈ చెయ్యబడని సముచితం వచ్చింది.
>> అవును.
మేము ఇప్పుడు చూడటానికి వలె, మరియు సాద్ తెలిపారు వంటి,
మేము పరుగుల లేదా r టైప్ ఎంటర్ నొక్కండి, మేము ఇప్పటికీ అదే seg లోపం పొందండి.
కాబట్టి GDB ఉపయోగించి మా సమస్యను పరిష్కరించడానికి లేదు.
కానీ మాకు కొన్ని చెయ్యబడని సముచితం కాని ఇస్తుంది, మరియు అది అవుతుంది ఈ చెయ్యబడని సముచితం
అది ఏం జరుగుతున్నది పేరు వాస్తవానికి మాకు చెబుతుంది.
ఈ కొద్దిగా అన్వయించడం, ఈ మొదటి బిట్ ప్రతిదీ తప్పు జరగబోతోంది దీనిలో ప్రమేయం.
అక్కడ ఈ __ strcmp_sse4_2, అది ఈ ఫైలులో జరుగుతున్నది మాకు చెబుతుంది
sysdeps/i386 అని, ఈ, మళ్ళీ, మెస్ రకం - కాని లైన్ 254.
ఆ అన్వయించడం రకమైన కష్టం. మీరు, ఈ వంటి అవ్వండి సాధారణంగా ఉన్నప్పుడు
అది వ్యవస్థ లైబ్రరీలకు ఒక భ్రంశం ఏర్పడుతుంది seg యొక్క అర్థం.
కాబట్టి ఏదో strcmp తో. మీరు అబ్బాయిలు ముందు strcmp సాధించింది.
చాలా క్రేజీ, కానీ ఈ strcmp strcmp తో సమస్య ఉంది పగిలిన లేదా అర్థం చేస్తుంది?
మీరు, అలెగ్జాండర్ ఏమి ఆలోచిస్తాడు?
[అలెగ్జాండర్] అంటే - 254 లైన్? మరియు - కాదు బైనరీ, కానీ వారి పైకప్పులు కాదు,
ఆపై ప్రతి చర్య కోసం మరొక భాష లేదు. - ఆ ఫంక్షన్ లో 254, లేదా?
>> ఇది లైన్ 254 ఉంది. ఈ. S ఫైలు లో ఉన్నట్లు కనిపిస్తుంది, బహుశా దీన్ని యొక్క అసెంబ్లీ కోడ్ కాబట్టి.
>> కానీ, నేను, మేము ఒక seg తప్పు సంపాదించిన చేసిన ఎందుకంటే మరింత ముఖ్యమైన విషయం, ఇది ఊహించడం
మరియు అది strcmp ఫంక్షన్ వస్తున్నాయో కనిపిస్తుంది,
ఈ అర్థం లేదు, అప్పుడు, ఆ strcmp విభజించబడింది?
అది, కాదు. మీరు విభజన లోపంగా కలిగి ఉంటారు కనుక
సిస్టమ్ కార్యక్రమాల్లో ఒకటి లో సాధారణంగా ఆ మీరు సరిగ్గా దీనిని లేదు అంటే.
ఏ వాస్తవానికి జరగబోతోంది గుర్తించడానికి చేయడానికి వేగవంతమైన విషయం
మీరు ఒక seg తప్పు చూసినప్పుడు మీరు ఈ క్రేజీ ఏదో, చూసినప్పుడు,
మీరు కంటే ఎక్కువ కేవలం ప్రధాన ఉపయోగించి ఒక ప్రోగ్రామ్ను ముఖ్యంగా
ఒక వెనుకకు ఉపయోగిస్తారు.
నేను పూర్తి వెనుకకు పదం వ్యతిరేకంగా, BT వ్రాయడం ద్వారా వెనుకకు నిర్వచించడం.
కానీ షార్లెట్, మీరు BT టైప్ మరియు హిట్ నమోదు ఏమి జరుగుతుంది?
[షార్లెట్] ఇది నాకు రెండు పంక్తులు లైన్ 0 మరియు పంక్తి 1 చూపిస్తుంది.
>> అవును. కాబట్టి లైన్ 0 మరియు పంక్తి 1.
ఈ కార్యక్రమం మీ కూలిపోవడంతో నాటకంలో ప్రస్తుతం అని అసలు స్టాక్ ఫ్రేమ్లు.
చాలా ఎత్తైన ఫ్రేమ్, ఫ్రేమ్ 0 నుండి, మరియు ఫ్రేమ్ 1 ఇది, క్రింద అత్యంత వెళ్ళడం జరుగుతుంది.
మా చాలా ఎత్తైన ఫ్రేమ్ strcmp ఫ్రేమ్.
మీరు ఈ యొక్క మేము గమనికలు తో క్విజ్ న చేస్తున్న ఆ సమస్యకు ఒకే రకమైన ఆలోచించవచ్చు
అక్కడ, ప్రధాన స్టాక్ ఫ్రేమ్ పైన స్టాక్ ఫ్రేమ్ మార్పిడి చేసింది
మరియు మేము swap ప్రధాన వాడుకుంటున్నారని వేరియబుల్స్ పైన వాడుకుంటున్నారని వేరియబుల్స్ వచ్చింది.
ఇక్కడ మా క్రాష్ మా ప్రధాన చర్య ద్వారా అని కూడా పిలుస్తారు మా strcmp ఫంక్షన్ లో జరిగింది,
మరియు వెనుకకు మాకు విషయాలు విఫలమైంది దీనిలో విధులు మాత్రమే అందిస్తున్న,
వాటి నుండి అని పిలువబడుతుంది కానీ కూడా మాకు చెప్పుచున్నారు.
నేను ఒక చిన్న ఎక్కువ స్క్రోల్, అయితే
మేము అవును, మేము ఈ strcmp-sse4.s ఫైల్ లైన్ 254 ఉంటాయి చూడగలరు.
కానీ కాల్ buggy1.c, లైన్ 6 వద్ద చేశారు.
మేము తనిఖీ మరియు ఏమి చూడండి వెళ్ళే ఉంది - మేము అర్థం కాబట్టి
buggy1.c, లైన్ 6 వద్ద.
మళ్లీ, దీన్ని రెండు మార్గాలు ఉన్నాయి. ఒక GDB నుండి నిష్క్రమించాలనుకుంటున్నారా ఉంది
లేదా మీ కోడ్ మరొక విండోలో మరియు క్రాస్ సూచనగా తెరిచారు.
ఇప్పుడు మీరు ఆఫీసు గంటల ఉన్నప్పుడు ఎందుకంటే ఆ, మరియు యొక్క, అందంగా సులభ ఉంది
మరియు మీరు ఒక seg లోపం పొందారు మరియు ప్రతిదీ బద్దలు అక్కడ మీ TF, వొండరింగ్ యొక్క
మీరు "ఓహ్, లైన్ 6, చెప్పగలదు. నేను, ఏమి తెలియదు
కానీ లైన్ 6 గురించి నా ప్రోగ్రామ్ తొలగించేందుకు చేస్తుంది. "
దీన్ని ఇతర మార్గం మీరు GDB లో జాబితా అని ఈ ఆదేశం ఉపయోగించవచ్చు ఉంది.
మీరు l తో నిర్వచించడం చేయవచ్చు.
మేము l హిట్ చేస్తే, ఇక్కడ మేము ఏమి వస్తుందా?
మేము విచిత్రమైన విషయం యొక్క మొత్తం బంచ్ పొందండి.
ఈ వాస్తవ అసెంబ్లీ కోడ్
ఆ strcmp_sse4_2 ఉంది.
ఈ, అల్లరిగా రకం ఉంది
మరియు మేము ఈ చేస్తున్నారు కారణం, ప్రస్తుతం ఎందుకంటే ఉంది
GDB ఫ్రేమ్ 0 లో మాకు ఉంది.
>> కాబట్టి ఎప్పుడైనా మేము చూడండి వేరియబుల్స్ వద్ద, మేము సోర్స్ కోడ్ దృష్టి ఏ సమయంలో,
మేము స్టాక్ ఫ్రేమ్ దేనికి మేము సైన్ ప్రస్తుతం ఉన్నట్లు సోర్స్ కోడ్ వద్ద చూస్తున్న
కాబట్టి అర్థవంతమైన ఏదైనా పొందడానికి, మేము కలిగి
మరింత అర్థవంతంగా ఉంటుంది ఒక స్టాక్ ఫ్రేమ్ వెళతారు.
ఈ సందర్భంలో, ప్రధాన స్టాక్ ఫ్రేమ్, కొంచెం సెన్స్ చేస్తుంది
వాస్తవానికి మేము రాసిన కోడ్ ఎందుకంటే.
కాదు strcmp కోడ్.
మేము రెండు ఎందుకంటే మీరు, ఈ సందర్భంలో, ఫ్రేముల మధ్య తరలించవచ్చు మార్గం,
మేము, 0 మరియు 1 కలిగి
మీరు పైకి క్రిందికి ఆదేశాలను తో అలా.
నేను ఒక ఫ్రేమ్, పైకి తరలించు ఉంటే
ఇప్పుడు నేను ప్రధాన స్టాక్ ఫ్రేమ్ లో ఉన్నాను.
నేను అక్కడ వెళ్ళడానికి డౌన్ తరలించవచ్చు
మళ్ళీ పైకి వెళ్ళి, మళ్ళీ డౌన్ వెళ్ళి, మళ్ళీ పెరుగుతుంది.
మీరు GDB మీ ప్రోగ్రామ్, మీరు ఒక క్రాష్ పొందండి, మీరు, వెనుకకు అనుసరించిన పొందండి
మరియు మీరు ఏమి తెలియదు కొన్ని ఫైల్ లో ఉండే చూడండి.
మీరు జాబితా ప్రయత్నించండి, కోడ్, మీరు తెలిసిన కనిపించడం లేదు
మీ ఫ్రేములు పరిశీలించి మరియు మీరు ఎక్కడ గుర్తించడానికి.
మీరు తప్పుడు స్టాక్ ఫ్రేమ్ లో బహుశా మీరే.
లేదా కనీసం మీరు నిజంగా డీబగ్ చేసే ఒక లేని ఒక స్టాక్ ఫ్రేమ్ లో ఉన్నాము.
ఇప్పుడు మేము తగిన స్టాక్ ఫ్రేమ్ లో ఉన్నట్లు, మేము, ప్రధాన ఉన్నారు
ఇప్పుడు మేము లైన్ గురించి గుర్తించడానికి జాబితా ఆదేశం ఉపయోగించవచ్చు.
మరియు మీరు చూడగలరు; అది ఇక్కడే మాకు అది ముద్రించబడింది.
కానీ మేము ఒకే జాబితా హిట్, మరియు జాబితా మాకు ఈ nice ప్రింటవుట్ ఇస్తుంది
ఇక్కడ జరగబోతోంది నిజమైన సోర్స్ కోడ్ యొక్క.
>> ముఖ్యంగా, మేము లైన్ 6 చూడవచ్చు.
మేము ఇక్కడ ఏమి చూడగలరు.
మేము ఒక స్ట్రింగ్ పోలిక చేస్తున్న వంటి మరియు అది కనిపిస్తుంది
స్ట్రింగ్ "CS50 రాళ్ళు" మరియు argv మధ్య [1].
ఈ గురించి ఏదో అపాయం జరిగినది.
మిస్సి కాబట్టి, మీరు ఇక్కడ ఏం జరుగుతోందో ఉండవచ్చు ఏ ఆలోచనలు ఉన్నాయి?
[మిస్సి] ఇది వేగంగా పడిపోతున్న ఎందుకు నాకు తెలియదు. అది క్రాష్ ఎందుకు >> మీకు తెలియదు?
జిమ్మీ, ఏ ఆలోచనలు?
[జిమ్మీ] నేను పూర్తిగా తెలియదు, కానీ మేము స్ట్రింగ్ ఉపయోగించిన చివరి సమయంలో పోల్చి,
లేదా strcmp, మేము అది కింద మూడు వేర్వేరు సందర్భాల్లో వంటి వచ్చింది.
మేము ఒక == లేదు, నేను మొదటి లైన్ లో, భావించడం లేదు.
బదులుగా ఇది మూడు వేరు చేయబడ్డాయి, మరియు ఒక == 0 ఉంది
ఒకటి <0, నేను అనుకుంటున్నాను, మరియు ఒకటి> 0.
ఆ వంటి కాబట్టి బహుశా ఏదో? >> అవును. కాబట్టి ఈ సమస్యను లేదు
మేము సరిగ్గా పోలిక చేస్తున్నారు?
స్టెల్లా? ఏదైనా ఆలోచనలు?
[స్టెల్లా] నాకు ఖచ్చితంగా తెలియదు. >> తెలియడం. డేనియల్? ఆలోచనలు? సరే.
ఇది మేము కార్యక్రమాన్ని ఏమి ఇక్కడే ఏం జరుగుతున్నది ఉంది అవుతుంది
మీరు మొదటి సారి కార్యక్రమం, డేనియల్, పరిగెడుతున్నప్పుడు మరియు మేము, seg తప్పు వచ్చింది
మీరు ఏ ఆదేశ పంక్తి వాదనలు ఇస్తుండేవారు?
[డేనియల్] నం >> నం ఆ సందర్భంలో, argv విలువ ఏమిటి [1]?
>> విలువ ఉంది. >> కుడి.
Well, ఏ తగిన స్ట్రింగ్ విలువ ఉంది.
కానీ కొన్ని విలువ ఉంది. అక్కడ నిల్వ పొందే విలువ ఏమిటి?
>> ఒక చెత్త విలువ? ఈ సందర్భంలో, ఒక చెత్త విలువ లేదా >>,
argv శ్రేణి ముగింపు ఎప్పుడూ శూన్య తో రద్దయిపోతుంది.
సో వాట్ వాస్తవానికి నిల్వ చేసుకుని శూన్య ఉంది.
ఇతర మార్గం, బదులుగా ద్వారా ఆలోచిస్తూ కంటే, ఈ పరిష్కరించడానికి
అది ముద్రించిన ప్రయత్నించాలి.
నేను, GDB ఉపయోగించి గొప్ప అని చెప్పడం ఇక్కడ ఈ ఉంది
మీకు కావలసిన మీరు అన్ని విషయాల్లోనూ ముద్రించాలా ఎందుకంటే, అన్ని విలువలు
ఈ హుం దండి p ఆదేశాన్ని ఉపయోగించి.
నేను p టైప్ మరియు చేస్తే అప్పుడు నేను, ఒక వేరియబుల్ లేదా ఒక వేరియబుల్ పేరు విలువ టైప్
, argc చెప్పడానికి నేను argc 1 ఉందని.
నేను argv ముద్రించాలా అనుకుంటే [0], నేను ఆ వంటి చేయవచ్చు.
మరియు మేము చూసిన వలె argv [0] ఎల్లప్పుడూ మీ ప్రోగ్రామ్ యొక్క పేరు,
ఎల్లప్పుడూ executable యొక్క పేరు.
ఇక్కడ మీరు పూర్తి మార్గం పేరు వచ్చింది చూడండి.
నేను కూడా ముద్రించవచ్చు argv [1] మరియు ఏమి చూడండి.
>> ఇక్కడ మేము ఆధ్యాత్మిక విలువ ఈ రకమైన వచ్చింది.
మేము ఈ 0x0 వచ్చింది.
మేము హెక్సాడెసిమల్ సంఖ్యలను గురించి మాట్లాడారు పదం ప్రారంభంలో గుర్తుంచుకో?
లేదా hex లో 50 ప్రాతినిధ్యం గురించి pset 0 చివరిలో ఆ చిన్న ప్రశ్న?
మేము CS లో హెక్స్ అంకెలు రాయడం విధంగా, కేవలం మనలోని గందరగోళ కు
దశాంశ సంఖ్యలో, మేము ఎల్లప్పుడూ 0x తో ఉపసర్గ.
కాబట్టి ఈ 0x ఉపసర్గ ఎల్లప్పుడూ ఒక హెక్సాడెసిమల్ సంఖ్య తదుపరి సంఖ్య అర్థం అర్థం
ఒక స్ట్రింగ్ వంటి, ఒక దశాంశ సంఖ్య, ఒక బైనరీ సంఖ్య.
సంఖ్య 5-0 హెక్సాడెసిమల్ లో ను కనుక.
మరియు అది దశాంశ, 50 లో అనేక ఉంది.
కాబట్టి ఈ మేము disambiguate ఎంత ఉంది.
కాబట్టి కూడా 0 దశాంశ ఇది 0x0 అంటే హెక్సాడెసిమల్ 0,, బైనరీ 0.
ఇది కేవలం విలువ 0 ఉంది.
ఈ శూన్య మెమరీలో, వాస్తవానికి, ఏమిటి అని అవుతుంది.
శూన్య కేవలం 0.
ఇక్కడ, మూలకం [1] శూన్య ఉంది argv వద్ద నిల్వ.
కాబట్టి మేము ఒక శూన్య స్ట్రింగ్ మా "CS50 రాళ్ళు" స్ట్రింగ్ పోల్చడానికి ప్రయత్నిస్తున్న.
కాబట్టి శూన్య dereferencing, శూన్య వద్ద విషయాలు యాక్సెస్ చేయడానికి ప్రయత్నిస్తున్న,
ఆ సాధారణంగా విభజన లోపంగా లేదా జరిగే ఇతర చెడ్డ విషయాలు విధమైన కారణం ఇస్తున్నాయి.
మరియు అది strcmp చూడటానికి తనిఖీ లేదు అవుతుంది
మీరు శూన్య ఉన్న ఒక విలువ జారీ చేసిన లేదో.
అయితే, ఆ అల వెళుతుంది, దాని పనిని చేయడానికి ప్రయత్నిస్తుంది
ఇది లోపాలు seg ఉంటే, అది లోపాలుగా seg, మరియు మీ సమస్య. మీరు దాన్ని పరిష్కరించడానికి వెళ్ళాలి.
రియల్లీ త్వరగా, మేము ఈ సమస్య ఎలా పరిష్కరించాలి ఉండవచ్చు? షార్లెట్?
[షార్లెట్] మీరు ఉపయోగించి పరిశీలించవచ్చు.
అయితే argv [1] శూన్య ఉంది, == 0, అప్పుడు 1 తిరిగి, లేదా ఏదో [అపారదర్శక].
>> అవును. కాబట్టి, మనం చూడడానికి తనిఖీ చేయవచ్చు, ఇది చేయడానికి ఒక గొప్ప మార్గం
మేము strcmp లోకి పాస్ చేయబోతున్నారు విలువ, argv [1], ఇది శూన్యం ఉంది?
అది యొక్క శూన్య, అప్పుడు మేము, గర్భస్రావము సరే చెప్పగలను.
>> దీన్ని మరింత సాధారణ మార్గం argc విలువ ఉపయోగిస్తారు.
మీరు, ప్రధాన ప్రారంభంలో ఇక్కడ చూడగలరు
మేము, మేము ఆదేశ పంక్తి వాదనలు ఉపయోగించినప్పుడు, మేము సాధారణంగా చేసే మొదటి టెస్ట్ తొలగించిన
ఇది మా argc విలువ కాదనీ ఏమిటి లేదో పరీక్షించడానికి ఉంది.
ఈ సందర్భంలో, మనం, కనీసం రెండు వాదనలు ఆశించే చేస్తున్నారు
కార్యక్రమం యొక్క పేరు ప్లస్ ఇతర ఒక.
మేము ఇక్కడ రెండవ వాదన ఉపయోగించడానికి గురించి ఉన్నారు.
మా strcmp కాల్ ముందు, ముందుగా పరీక్ష విధమైన కలిగి
argv కనీసం 2 లేదా అని పరీక్షలు కూడా విషయం అదే విధమైన చేయరు.
ఆ మళ్ళీ ప్రోగ్రామ్ను అమలు చేసి పనిచేస్తుంది మేము చూడగలరు.
మీరు ఎల్లప్పుడూ నిజంగా నైస్ ఇది GDB, మీ ప్రోగ్రామ్ పునఃప్రారంభించుము చేయవచ్చు.
, మీరు అమలు చెయ్యవచ్చు, మరియు మీరు మీ ప్రోగ్రామ్ వాదనలు లో పాస్ చేసినప్పుడు
మీరు GDB అప్ బూట్ చేసినప్పుడు, మీరు అమలు కాల్ చేసినప్పుడు వాటిని పాస్ లేదు.
ఆ విధంగా మీరు వివిధ వాదనలు ప్రతి సమయం మీ ప్రోగ్రామ్ ప్రేరేపించడం ఉంచుకోవచ్చు.
కాబట్టి అమలు, లేదా మళ్లీ నేను r టైపు చెయ్యవచ్చు మరియు మేము టైప్ ఏమి "హలో" జరిగినప్పుడు చూడండి లెట్స్.
మీరు మళ్ళీ ప్రారంభం నుండి ప్రారంభం కావాలి అది ఎల్లప్పుడూ మీరు అడుగుతాము.
సాధారణంగా, మీరు మళ్ళీ ప్రారంభం నుండి ప్రారంభం అనుకుంటున్నారు.
మరియు ఈ సమయంలో, పునఃప్రారంభాలు మళ్లీ దాన్ని ముద్రిస్తుంది
మేము వాదన హలో తో, buggy1 రన్ చేస్తున్న కార్యక్రమం,
మరియు ఈ ప్రామాణిక అవుట్ ముద్రిస్తుంది ఇది విచారమైన ముఖం "మీరు D పొందండి", అన్నారు.
కానీ మేము తప్పు seg లేదు. ఇది ఆ ప్రక్రియ సాధారణంగా ముగిసింది చెప్పారు.
కాబట్టి ఆ అందంగా బాగుంది.
No more seg లోపం, మేము, అది గత చేసిన
ఆ నిజానికి మేము పొందుతున్న ఆ seg లోపం బగ్ వంటి అలా కనిపిస్తోంది.
దురదృష్టవశాత్తు, మేము ఒక D. చేస్తున్నారు మాకు చెబుతుంది
>> మేము తిరిగి వెళ్లి కోడ్ చూడండి మరియు అక్కడ ఏమి చూడగలరు
గురించి గుర్తించడానికి - అది మేము ఒక D. వచ్చింది అని మాకు చెప్పడం ఎందుకు
ఈ printf మీరు ఒక D. వచ్చింది అని చెప్పడం యొక్క చూసేలా, ఇక్కడ జరిగినది
మేము జాబితా టైప్ ఉంటే మీరు టైప్ జాబితాను ఉంచుకోండి వంటి, ఇది మీ ప్రోగ్రామ్ ద్వారా డౌన్ iterating ఉంచుతుంది
కాబట్టి మీరు మీ ప్రోగ్రామ్ యొక్క మొదటి కొన్ని లైన్లు తెలియజేస్తాము.
అప్పుడు మీరు తదుపరి కొన్ని పంక్తులు మరియు తరువాత భాగం మరియు తరువాత భాగం తెలియజేస్తాము.
మరియు అది తగ్గుముఖం పడతాయని ప్రయత్నిస్తూనే ఉంటాం.
ఇప్పుడు మేము "సంఖ్య 16 పరిధి గడువు లైన్." చూస్తారు
అది మాత్రమే 15 లైన్లు ఉంటుంది కాబట్టి.
మీరు ఈ పాయింట్ ను మరియు మీ "నేను ఏమి చేయాలి?", వొండరింగ్ ఉంటే మీరు సహాయం ఆదేశం ఉపయోగించవచ్చు.
సహాయం మరియు అప్పుడు అది ఒక ఆదేశం యొక్క పేరును ఇవ్వండి ఉపయోగించండి.
మరియు మీరు GDB మాకు stuff అన్ని ఈ విధమైన ఇస్తుంది చూడండి.
ఇది "ఏ వాదన గత లిస్టింగ్ తర్వాత లేదా చుట్టూ పది పంక్తులు జాబితా అన్నారు.
జాబితా - ముందు పది పంక్తులు జాబితా - "
కాబట్టి యొక్క జాబితా మైనస్ ఉపయోగించి ప్రయత్నించండి తెలియజేయండి.
మరియు ఆ 10 పంక్తులు మునుపటి జాబితా; మీరు జాబితా తో కొద్దిగా చుట్టూ ప్లే చేసుకోవచ్చు.
మీరు జాబితా, జాబితా చేయవచ్చు -, మీరు కూడా, జాబితా 8 వంటి జాబితా అనేక ఇస్తుంది
మరియు అది పంక్తి 8 చుట్టూ 10 పంక్తులు జాబితా చేస్తాము.
మీరు ఇంకా సాధారణ పొందారు మరియు మీరు ఇక్కడ ఏమి చూడగలరు.
మీరు CS50 రాళ్ళు టైప్ చేస్తే, అది "మీరు ఒక A. పొందుటకు" అవుట్ ముద్రిస్తుంది
లేకపోతే అది "మీరు ఒక D. పొందండి" అవుట్ ముద్రిస్తుంది
అయ్యో పట్టణం. అన్ని కుడి. అవును?
>> [డేనియల్] నేను కోట్లు లేకుండా CS50 రాళ్ళు చేయడం ప్రయత్నించినప్పుడు,
ఇది "మీరు ఒక D. పొందండి" అని
నేను పని చెయ్యడానికి ల అవసరం; ఎందుకు అంటే?
>> అవును. ఇది అవుతుంది ఆ సమయంలో - ఈ మరొక సరదాగా చిన్న tidbit ఉంది -
మేము అమలు మీరు, అమలు మరియు మేము CS50 రాళ్ళు టైప్ చేసినప్పుడు,
కేవలం వంటి డేనియల్ అతను చేసిన చెప్పడం జరిగింది, మరియు మీరు Enter
అది ఇప్పటికీ మేము ఒక D. అని అన్నారు
మరియు ప్రశ్న, ఎందుకు ఈ ఉంది?
మరియు అది మా టెర్మినల్ మరియు GDB ఈ రెండు రెండు ప్రత్యేక వాదనలు విశ్లేషించడం ఆ అవుతుంది.
వంటి సూచించినట్లు ఒక ఖాళీ ఉంది కాబట్టి
మొదటి వాదన ముగిసిన; తదుపరి వాదన ప్రారంభించడానికి ఉంటుంది.
రెండు ఆ కలపడానికి మార్గం, లేదా క్షమించాలి, ఒక వాదన లోకి,
కోట్స్ ఉపయోగిస్తారు.
మేము కోట్స్ లో ఉంచండి మరియు మళ్లీ అమలు చేస్తే ఇప్పుడు, మేము ఒక A. పొందండి
కాబట్టి కేవలం రీక్యాప్ ఇక కోట్స్, CS50 మరియు రాళ్ళు రెండు ప్రత్యేక వాదనలు అన్వయించడం ఉంటాయి.
సూక్తులు, అది పూర్తిగా ఒక వాదన అన్వయించడం యొక్క.
>> మేము ఒక బ్రేక్ పాయింట్ తో ఈ చూడగలరు.
ఇప్పటివరకు మేము మా ప్రోగ్రామ్ను అమలు చేసిన, మరియు అది అమలు చేయబడింది
గాని అది లోపాలు లేదా హిట్స్ లోపం seg వరకు
లేదా నుండి నిష్క్రమించారు మరియు అన్ని పూర్తిగా జరిమానా వరకూ.
కొన్నిసార్లు ఎందుకంటే ఇది తప్పనిసరిగా చాలా సహాయకారిగా విషయం కాదు
మీరు మీ కార్యక్రమాన్ని లోపం ఉంది, కానీ అది విభజన లోపంగా దీనివల్ల కాదు.
మీ ఆపడానికి కార్యక్రమం లేదా ఏదైనా వంటి దీనివల్ల కాదు.
మీ ప్రోగ్రామ్ ఒక నిర్దిష్ట సమయంలో ఆగిపోవటం GDB పొందడానికి మార్గం
ఒక బ్రేక్ పాయింట్ సెట్ ఉంటుంది.
మీరు ఒక పని పేరు ఒక బ్రేక్ పాయింట్ అమర్చుట ద్వారా చేయవచ్చు
లేదా మీరు కోడ్ యొక్క ఒక నిర్దిష్ట లైన్ లో బ్రేక్పాయింట్ని సెట్ చేయవచ్చు.
గుర్తుంచుకోవడానికి సులభమైన, - ఎందుకంటే నేను, ఫంక్షన్ పేర్లు మీద బ్రేక్ పాయింట్స్ అమర్చాలనుకుంటున్నారా
మరియు మీరు నిజంగానే లో వెళ్ళి కొద్దిగా మీ సోర్స్ కోడ్ మార్చితే,
అప్పుడు మీ బ్రేక్పాయింట్ని నిజానికి మీ కోడ్ లో అదే ప్రదేశంలో ఉంటారు.
అయితే మీరు లైన్ సంఖ్యలు ఉపయోగించే, మరియు లైన్ సంఖ్యలను మార్చడం ఉంటే
మీరు కొన్ని కోడ్ జోడించడం లేక తొలగించడం ఎందుకంటే, అప్పుడు మీ బ్రేక్ పాయింట్స్ అన్ని పూర్తిగా ఇరుక్కొనిపోయింది ఉంటాయి.
నేను చాలా సాధారణ విషయాలు ఒకటి ప్రధాన విధి ఒక బ్రేక్ పాయింట్ సెట్.
తరచుగా నేను GDB అప్ బూటు చేస్తాము, నేను Enter ని, బి ముఖ్యమైన చేస్తాము, మరియు ఒక బ్రేక్ పాయింట్ సెట్ చేస్తాము
కేవలం అన్నారు ఇది ప్రధాన ఫంక్షన్, ", వెంటనే మీరు రన్ ప్రారంభం వంటి ప్రోగ్రామ్ విరామం"
మరియు ఆ విధంగా, నేను CS50 రాళ్ళు, సే, నా అమలు చేసేటప్పుడు రెండు వాదనలు
మరియు, Enter ని, అది ప్రధాన కు వచ్చి సరైన మొట్టమొదటి లైన్ వద్ద ఆపి
అది strcmp ఫంక్షన్ మదింపు కుడి ముందు.
>> నేను పాజ్ చేస్తున్నాను కాబట్టి, ఇప్పుడు నేను చుట్టూ mucking మరియు ఏమి చూడటాన్ని ప్రారంభించవచ్చు
నా కార్యక్రమం జారీ చేసే వివిధ వేరియబుల్స్ యొక్క అన్ని.
ఇక్కడ నేను argc ముద్రించాలా మరియు ఏమి చూడగలరు.
అది లో 3 వేర్వేరు విలువలు గాట్ ఎందుకంటే argc, 3 అని చూడండి.
ఈ కార్యక్రమం యొక్క పేరు సంపాదించి, అది మొదటి వాదన మరియు రెండవ వాదన కలిగియున్నారు.
మేము argv చూడటం ద్వారా ఆ అవ్ట్ ముద్రించవచ్చు [0] argv [1], మరియు argv [2].
ఈ strcmp కాల్ విఫలం అన్నారు ఎందుకు కాబట్టి ఇప్పుడు మీరు కూడా, చూడగలరు
మీరు రెండు ప్రత్యేక వాదనలు లోకి CS50 మరియు రాళ్ళు విడిపోయారు అని కాబట్టి.
మీరు ఒక బ్రేక్ పాయింట్ హిట్ చేసిన తర్వాత ఈ సమయంలో,, మీరు మీ కార్యక్రమం ద్వారా అడుగు కొనసాగించవచ్చు
లైన్ ద్వారా లైన్, మళ్ళీ మీ ప్రోగ్రామ్ మొదలు వ్యతిరేకంగా.
మీరు మళ్ళీ మరియు మీ ప్రోగ్రామ్ మొదలు అనుకుంటే కాబట్టి, ఇక్కడ నుండి కొనసాగుతుంది
మీరు కొనసాగితే ఆదేశం ఉపయోగించవచ్చు మరియు కొనసాగించడానికి చివర అమలు చేస్తుంది.
దీనిని ఇక్కడ చేశాడు.
I ప్రోగ్రామ్, CS50 రాళ్ళు పునఃప్రారంభించుము ఉంటే, అది, మళ్ళీ నా బ్రేక్పాయింట్ని హిట్స్
మరియు ఈ సమయంలో, నేను, ప్రోగ్రామ్ యొక్క మిగిలిన అన్ని మార్గం కేవలం వెళ్లాలనుకుంటే లేదు
నేను కూడా n తో నిర్వచించడం మరో ఆదేశం, ఉపయోగించవచ్చు.
మరియు ఈ లైన్ ద్వారా కార్యక్రమం లైన్ ద్వారా దిగవచ్చు.
విషయాలు అమలు కాబట్టి మీరు విషయాలు నవీకరించబడింది కొద్ది, వంటి వేరియబుల్స్ మార్పు చూడవచ్చు.
ఏ అందంగా nice ఉంది.
ఇతర చల్లని విషయం కాకుండా మళ్ళీ మరియు పైగా మరియు పైగా పైగా అదే ఆదేశం పునరావృత కంటే
మీరు Enter ని ఉంటే - ఇక్కడ మీరు నేను ఏదైనా టైప్ లేదు చూడండి -
నేను Enter ని, అది గత ఆదేశం పునరావృతం
లేదా మునుపటి GDB ఆదేశం నేను సైన్ పెట్టే
నేను ఎంటర్ కొట్టిన ఉంచడానికి మరియు ఇది లైన్ ద్వారా నా కోడ్ లైన్ ద్వారా పునాది ఉంటాం.
నేను మీరు అబ్బాయిలు ఇతర బగ్గీ కార్యక్రమాలు కూడా తనిఖీ వెళ్ళడానికి ప్రోత్సహిస్తుంది.
మేము వాటిని అన్ని నేడు విభాగంలో చూడటానికి సమయం లేదు.
సోర్స్ కోడ్ ఉంటుంది, అందువలన మీరు ఏమి చూడండి రకం చెయ్యవచ్చు
మీరు నిజంగా కష్టం కలిగితే వెనుక,
కానీ చాలా కనీసం, కేవలం, GDB అప్ బూటింగ్ సాధన
అది మీరు విచ్ఛిన్నం వరకు, ప్రోగ్రామ్ అమలు
,, వెనుకకు అనుసరించిన పొందడానికి ప్రమాదంలో ఉంది పని ఏమి ఇందుకు
ఏ రేఖ, కొన్ని వేరియబుల్ విలువలు ముద్రించిన, న
ఆ నిజంగా మీరు ముందుకు వెళుతున్న సహాయం చేస్తుంది ఎందుకంటే అందువల్ల మీరు, ఇది ఒక భావాన్ని పొందండి.
ఈ సమయంలో, మేము మీరు q విడిచి ఉపయోగించి లేదా లేని, GDB నుండి నిష్క్రమించినప్పుడు చూడాలని.
మీ ప్రోగ్రామ్ ఇప్పటికీ నడుస్తున్న మధ్య ఉంది, మరియు అది ముగిసింది లేకపోతే,
ఇది ఎల్లప్పుడూ మీరు అడుగుతాము, "మీరు నిజంగా నిష్క్రమించాలి అనుకుంటున్నారా?"
మీరు అవును నొక్కండి.
>> ఇప్పుడు మేము పిల్లి కార్యక్రమం ఇది మేము కలిగి తదుపరి సమస్య, కు వెళుతున్న.
మీరు రీడైరెక్ట్ మరియు పైప్సులోని చిన్న చూడటానికి, మీరు టామీ ఈ కార్యక్రమం ఉపయోగించే చూస్తారు
ప్రాథమికంగా స్క్రీన్ ఒక ఫైల్ యొక్క మొత్తం ఉత్పత్తిని ముద్రిస్తుంది.
నేను పిల్లి అమలు అయితే, ఈ ఉపకరణం వాస్తవానికి ఒక అంతర్నిర్మిత కార్యక్రమం,
మీరు Macs ఉంటే టెర్మినల్ అప్ తెరిస్తే మరియు మీరు చాలా మీ Mac లో చేయవచ్చు.
మరియు మేము - పిల్లి, యొక్క, cp.c అని పిలవబడు, ఎంటర్ నొక్కండి.
ఈ తరుణంలోనే, మేము కొద్దిగా పైకి స్క్రోల్ మరియు మేము లైన్ కోల్పోయారు చూడండి ఉంటే
లేదా మేము పిల్లి ఆదేశం కోల్పోయారు, వాచ్యంగా మా తెరకు cp.c విషయాలు ముద్రించిన.
మేము మళ్ళీ దీన్ని అమలు చేయవచ్చు మరియు మీరు కలిసి బహుళ ఫైళ్లను ఉంచవచ్చు.
, కాబట్టి మీరు పిల్లి cp.c చేయవచ్చు, మరియు మేము కూడా cat.c ఫైలు concatenate చేయవచ్చు
ఇది మనం వ్రాయడానికి ఉన్నారు కార్యక్రమం
మరియు అది మా స్క్రీన్ తిరిగి తిరిగి రెండు ఫైళ్లను ప్రింట్ చేస్తాము.
మేము కొద్దిగా పైకి స్క్రోల్ చేస్తే, మేము చూసే మేము ఈ పిల్లి cp.c, cat.c, పరిగెడుతున్నప్పుడు
మొదటి అది cp ఫైలు ముద్రించిన, ఆపై ఈ కింది, ఇది కుడి డౌన్ ఇక్కడ cat.c ఫైలు ముద్రించిన.
మేము మా అడుగుల తడి పొందడానికి ఈ ఉపయోగించడానికి వెళుతున్న.
టెర్మినల్ సాధారణ ముద్రణ తో చుట్టూ ప్లే, ఆ పని ఎలా చూడండి.
మీరు అబ్బాయిలు gedit cat.c తో తెరిస్తే, Enter నొక్కండి
మీరు మేము రాయడానికి చేయబోతున్నారు ప్రోగ్రామ్ చూడగలరు.
మేము ఈ nice బాయిలర్ ప్లేట్ చేర్చాను, మేము అన్ని ఆ టైప్ సమయం ఖర్చు లేదు కాబట్టి.
మేము కూడా సైన్ జారీ వాదనలు సంఖ్య తనిఖీ
మేము ఒక మంచి ఉపయోగం సందేశాన్ని ముద్రించండి.
>> ఈ, మళ్ళీ, వంటి మేము గురించి ఆలోచిస్తున్నాము ఆ, విషయం యొక్క విధమైన ఉంది
అది దాదాపు కండరాల మెమరీ వంటిది.
జస్ట్ stuff అదే విధమైన పనిని గుర్తు
మరియు ఎల్లప్పుడూ ఉపయోగపడిందా సందేశాన్ని విధమైన ముద్రించిన
తద్వారా మీ ప్రోగ్రామ్ను అమలు చేయడానికి ఎంత తెలుసు.
పిల్లి, అది చాలా సులభం; మేము వివిధ వాదనలు ద్వారా వెళ్ళడానికి వెళుతున్న
మా ప్రోగ్రామ్ విధించాయి, మరియు మేము ప్రింట్ చూడాలని
ఒక సమయంలో స్క్రీన్ ఒకదానిలో తమ విషయాలు బయటకు.
స్క్రీన్ ఫైళ్ళను ముద్రించాలా, మేము సమానమైన ఏదో చేయబోతున్నామని
మేము క్విజ్ చివరిలో అదే చేసింది కు.
కార్యక్రమం నియమించుకున్నారు ఆ క్విజ్, ముగింపులో, మేము ఒక ఫైల్ తెరుచుకుంటుంది వచ్చింది
మరియు తర్వాత మేము అది ముద్రించవచ్చు వచ్చింది.
ఈ సందర్భంలో, మనం ఒక ఫైల్ తెరుచుకుంటుంది చూడాలని, మరియు మేము దీనిని నుండి చదవడానికి వెళుతున్న.
అప్పుడు మేము బదులుగా ఒక ఫైల్ను యొక్క ముద్రించడం చూడాలని, మేము స్క్రీన్ ముద్రించవచ్చు చూడాలని.
కాబట్టి మీరు అన్ని printf తో ముందు చేసిన స్క్రీన్ కి ముద్రించడం.
కాబట్టి ఆ చాలా క్రేజీ కాదు.
కానీ ఒక ఫైల్ చదవడం అసహజ యొక్క రకం.
మేము ఒక సమయంలో ఒక చిన్న bit ద్వారా వెళ్తారో.
మీరు అబ్బాయిలు మీ క్విజ్, సమస్య 33 న చివరి సమస్య తిరిగి వెళ్ళడానికి ఉంటే
మేము ఇక్కడ చేయబోతున్నామని మొదటి పంక్తి, తెరుస్తోంది, మేము అక్కడ అదే చేసింది చాలా పోలి ఉంటుంది.
స్టెల్లా కాబట్టి, మనం ఒక ఫైల్ తెరిచినప్పుడు, అటువంటి లైన్ లుక్ చేస్తుంది?
[స్టెల్లా] కాపిటల్ FILE *, ఫైలు - >> సరే. >> - Fopen సమానంగా ఉంటుంది. >> అయ్యో.
ఈ సందర్భంలో ఇది? ఇది వ్యాఖ్య ఉంది.
>> ఇది వ్యాఖ్య ఉంది? argv [i] మరియు r?
ఖచ్చితంగా >>. కుడివైపు. కాబట్టి స్టెల్లా పూర్తిగా నిజం.
ఈ లైన్ ఎలా ఉంది.
మేము, ఒక ఫైల్ స్ట్రీమ్ వేరియబుల్ పొందండి ఫైలు * లో కొట్టుకు వెళ్లి, కాబట్టి మీరు అన్ని టోపీలు,
ఫైలు, *, మరియు ఈ వేరియబుల్ పేరు ఫైలు ఉంటుంది.
మేము కావలసిన కాల్ కాలేదు. మేము భావిస్తున్న ఏ, అది first_file, లేదా file_i కాల్ కాలేదు.
ఆపై ఫైల్ పేరు ఈ కార్యక్రమానికి ఆదేశ లో జారీ చేశారు.
కనుక ఇది argv నిల్వచేయబడిన [i,] మరియు అప్పుడు మేము చదవడానికి రీతిలో ఈ ఫైల్ను తెరవడం చూడాలని.
మేము మోపడం ఇప్పుడు ఆ, మనం ఎప్పుడూ చేయడానికి గుర్తు పెట్టుకోవాలి ఆ విషయం
మేము ఒక ఫైలు తెరిచిన ప్రతిసారి? ఇది దగ్గరగా.
మిస్సి కాబట్టి, ఎలా మేము ఫైలు దగ్గరగా చెయ్యాలి?
[మిస్సి] fclose (ఫైలు) >> fclose (ఫైలు). సరిగ్గా.
గ్రేట్. సరే. మేము ఇక్కడ వ్యాఖ్య చేయడానికి ఈ దృష్టి, ఉంటే
అది "ఓపెన్ argv [i] మరియు stdout దాని కంటెంట్లను ప్రింట్." అన్నారు
>> ప్రామాణిక అవుట్ అసాధారణ పేరు. Stdout చెప్పడం కేవలం మా మార్గం
మేము టెర్మినల్కు ప్రింట్ మీరు; మేము ప్రామాణిక అవుట్పుట్ ప్రవాహం దానిని ప్రింట్ మీరు.
మేము నిజంగా ఇక్కడే ఈ వ్యాఖ్య విమోచనం పొందవచ్చు.
నేను కాపీ మరియు మేము ఏమి నుండి అతికించండి వెళుతున్న.
ఈ సమయంలో, ఇప్పుడు మేము బిట్ ఫైలు బిట్ చదవడానికి కలిగి ఉంటాయి.
మేము చదవడానికి ఫైళ్ళ రెండు మార్గాలు చర్చించారు చేసిన.
ఏవో ఇంతవరకు మీ ఇష్టమైనవి?
ఏ మార్గాలు మీరు చూసిన లేదా మీరు ఫైళ్ళను చదవటానికి, గుర్తు లేదా?
[డేనియల్] fread? >> Fread? కాబట్టి fread ఒకటి. జిమ్మీ, మీరు ఏ ఇతరులు తెలుసు?
[జిమ్మీ] నం >> సరే. వద్దు. షార్లెట్? అలెగ్జాండర్? ఏదైనా ఇతరులు? సరే.
కాబట్టి ఇతర వాటిని మేము చాలా ఉపయోగిస్తాము ఆ, ఒక fgetc ఉంది.
కూడా fscanf లేదు; మీరు అబ్బాయిలు ఇక్కడ నమూనా చూడండి?
వారు అన్ని F ప్రారంభమవుతాయి. ఫైలు ఎటువంటి.
Fread, fgetc, fscanf ఉంది. ఈ reading విధులను ఉన్నాయి.
మేము fwrite కలిగి రాయడం కోసం, మేము బదులుగా fgetc యొక్క fputc ఉన్నాయి.
మేము కూడా fprintf మేము క్విజ్ చూసిన ఇష్టం చేసారు.
ఈ ఫైలు చదవడం ముడిపడి ఉన్న ఒక సమస్య నుంచి
మేము ఈ మూడు కార్యక్రమాల్లో ఒకటి ఉపయోగించడానికి వెళుతున్న.
మేము ఇక్కడ ఈ విధులు డౌన్ ఉపయోగించడానికి వెళ్ళి లేదు.
ఈ చర్యలు అన్ని ప్రామాణిక I / O లైబ్రరీ లో ఉన్నాయి.
మీరు ఈ ప్రోగ్రామ్ యొక్క టాప్ చూడండి, అయితే
మీరు ఇప్పటికే ప్రామాణిక I / O లైబ్రరీ కోసం శీర్షికా ఫైలును చేర్చాను ఆ చూడగలరు.
మేము గుర్తించడానికి కావలసిన అయితే, ఏ మేము ఉపయోగించాలనుకుంటున్నాను,
మేము ఎల్లప్పుడూ man పేజీలను తెరుచుకుంటుంది.
కాబట్టి మేము మనిషి stdio టైప్ చెయ్యవచ్చు
మరియు C. లో stdio ఇన్పుట్ మరియు అవుట్పుట్ చర్యలకు గురించి అన్ని చదవండి
మరియు మేము ఇప్పటికే OH, చూడండి చూడగలరు. ఇది fgetc ప్రస్తావించింది, అది fputc ప్రస్తావించింది యొక్క.
కాబట్టి మీరు fgetc, కొద్దిగా డౌన్ రంధ్రములు చేసే పరికరము మరియు చూడండి, చెప్పగలదు
మరియు దాని మాన్ పుటను చూడండి.
ఇతర విధులను మొత్తం బంచ్ పాటు వెళ్ళే చూడగలరు:
fgetc, fgets, getc, getchar, వస్తుంది, ungetc, మరియు అక్షరాలు మరియు పదాల్లో దాని ఇన్పుట్.
కాబట్టి ఈ, మేము ప్రామాణిక ఇన్పుట్ నుండి ఫైళ్ళను నుండి అక్షరాలు మరియు తీగలను లో చదవండి ఎలా ఉంది
ఇది వినియోగదారు తప్పనిసరిగా ఉంటుంది.
మరియు ఈ మేము నిజమైన C. లో ఎలా ఉంది
కాబట్టి ఈ GetString మరియు GetChar విధులు ఉపయోగించడం లేదు
మేము CS50 లైబ్రరీ నుండి ఉపయోగించిన.
మేము రెండు మార్గాలు ఈ సమస్య చేయబోతున్నామని
కాబట్టి మీరు చేస్తున్న యొక్క రెండు రకాలుగా చూడవచ్చు.
Fread డేనియల్ పేర్కొన్నారు ఆ ఫంక్షన్ మరియు fgetc రెండు దీన్ని మంచి మార్గాలు.
అది మాత్రమే కలిగి మీరు చూడండి నేను,,, fgetc కొద్దిగా సులభం అనుకుంటున్నాను
ఒక వాదన, మేము పాత్ర నుండి చదవడానికి ప్రయత్నిస్తున్న ఫైల్ *,
మరియు తిరిగి విలువ ఒక పూర్ణాంకానికి ఉంది.
మరియు ఈ కుడి, కొద్దిగా గందరగోళంగా ఉంది?
>> మేము ఒక పాత్ర చేస్తున్నారు కాబట్టి, ఎందుకు ఈ తిరిగి ఒక చార్ లేదు?
మీరు అబ్బాయిలు ఈ ఒక చార్ తిరిగి ఎందుకు ఏ ఆలోచనలు ఉన్నాయి?
[మిస్సి సమాధానాలు, అపారదర్శక] >> అవును. కాబట్టి మిస్సి పూర్తిగా నిజం.
ఇది ASCII అది ఈ పూర్ణాంక అసలు చార్ మ్యాప్ చేయవచ్చు.
ఒక ASCII పాత్ర, మరియు అది నిజం కాలేదు.
ఖచ్చితంగా ఏం ఉంది.
మరింత బిట్స్ ఉంది కేవలం ఎందుకంటే మేము ఒక పూర్ణాంకానికి ఉపయోగిస్తున్నారు.
మా చార్ మాత్రమే 8 బిట్స్ ఉంది, మా 32-bit కంప్యూటర్లలో బైట్ 1 ఆ; ఇది ఒక చార్ కంటే పెద్ద ఉంది.
మరియు ఒక పూర్ణాంకానికి అన్ని 4 బైట్లు 'విలువ.
మరియు అది fgetc పనిచేస్తుంది అవుతుంది,
మేము ఈ మనిషి పేజీ కొద్ది సేపట్లో మా సంక్షిప్తముగా లో స్క్రోల్ డౌన్ ఉంటే,
అన్ని మార్గం క్రిందికి స్క్రోల్ చేయండి. వారు EOF అని ఈ ప్రత్యేక విలువ ఉపయోగించే అవుతుంది.
ఇది fgetc ఫంక్షన్ తిరిగి విలువ ప్రత్యేక స్థిరంగా ఉంది
మీరు ఫైల్ యొక్క ముగింపు నొక్కండి, లేదా మీరు ఏదైనా లోపం జరిగితే. చేసినప్పుడు
మరియు అది సరిగ్గా EOF ఈ పోలికలు చేయడానికి ఆ అవుతుంది
మీరు ఒక Int లో మీరు కలిగిన సమాచార అదనపు మొత్తం కావాలి
ఒక చార్ వేరియబుల్ ఉపయోగించడానికి బదులుగా.
Fgetc ప్రభావవంతంగా, ఫైల్ నుండి ఒక పాత్ర పొందడానికి అయినప్పటికీ
మీరు మీకు రకం Int యొక్క ఏదో ఒకటి తిరిగి ఆ గుర్తుంచుకోవాలనుకుంటున్న.
అది ఉపయోగించడానికి చాలా సులభం అన్నారు.
ఇది పాత్ర ఇవ్వాలని జరగబోతోంది; అందువలన నాకు అన్ని ఫైల్ అడగడం ఉంచేందుకు ఉంటుంది,
"నా తర్వాత పాత్ర ఇవ్వాలని, నా తర్వాత పాత్ర ఇవ్వాలని, నా తర్వాత పాత్ర ఇవ్వండి"
మేము ఫైలు చివర వచ్చేవరకు.
మరియు ఆ, మా ఫైలు నుండి ఒక సమయంలో ఒక పాత్ర లో పుల్ కనిపిస్తుంది
మరియు తర్వాత మేము దానిని కావలసిన చేయవచ్చు.
మేము నిల్వ చేయవచ్చు, మేము, ఒక స్ట్రింగ్ జోడించడానికి మేము దాన్ని ముద్రించవచ్చు.
ఏ చేయండి.
>> వెనక్కి జూమ్ మరియు మా cat.c కార్యక్రమం తిరిగి వెళ్ళడం,
మేము fgetc ఉపయోగించడానికి వెళుతున్న ఉంటే,
ఎలా మేము కోడ్ యొక్క ఈ తదుపరి లైన్ పద్ధతిని ఉండవచ్చు?
మేము ఉపయోగించే చూడాలని - fread కొద్దిగా భిన్నంగా ఏదో ఒకటి కనిపిస్తుంది.
మరియు ఈ సమయంలో, మేము ఒక సమయంలో ఒక పాత్ర పొందడానికి fgetc ఉపయోగించడానికి వెళుతున్న.
మొత్తం ఫైల్ ప్రాసెస్, మనం చెయ్యవలసింది ఉంటుంది?
అక్కడ ఒక ఫైల్ లో ఎన్ని అక్షరాలు ఉంటాయి?
చాలా ఉన్నాయి. కాబట్టి మీరు బహుశా ఒక పొందాలనుకోవడం
మరియు వేరొక పొందండి మరియు మరొక పొందండి మరియు మరొక పొందండి.
మీరు ఇక్కడ మేము ఉపయోగించే ఉంటుంది అల్గోరిథం ఏ విధమైన అనుకుంటున్నారు?
ఏ రకం యొక్క -? లూప్ [అలెగ్జాండర్] A? ఖచ్చితంగా >>.
లూప్ కొన్ని రకం.
లూప్ ఒక ఈ సందర్భంలో, వాస్తవానికి గొప్ప ఉంది.
మీరు మొత్తం ఫైల్ పై లూప్ మీరు వంటి మరియు మీరు చెబుతున్న ఉన్నాయి, ఇది ధ్వనులు
ఒక సమయంలో ఒక పాత్ర పొందడానికి.
ఎలా అని ఏం ఏదైనా సూచనలు?
[అలెగ్జాండర్, అపారదర్శక]
>> సరే, కేవలం మీరు ప్రయత్నిస్తున్న ఏమి ఇంగ్లీష్ లో చెప్పండి? [అలెగ్జాండర్, అపారదర్శక]
మేము మొత్తం ఫైల్ మీద లూప్ ప్రయత్నిస్తున్నట్లు కాబట్టి ఈ విషయంలో, ధ్వనులు.
[అలెగ్జాండర్] నేను > పరిమాణం -?
నేను, ఫైలు పరిమాణం అంచనా? పరిమాణం - we'll కేవలం ఈ వలె రాస్తుంది.
సారి ఫైలు పరిమాణంలో ఉంటాయి, నేను + +.
అది మీరు ఈ fgetc ఉపయోగించి, మరియు లేదు మార్గం ఈ కొత్త అని అవుతుంది
ఫైల్ యొక్క పరిమాణం పొందడానికి ఏ సులభం అని ఉంది
మీరు ముందు చూసిన నిర్మించడం ఈ "sizeof" రకం.
మేము ఆ fgetc ఫంక్షన్ ఉపయోగించినప్పుడు, మేము రకమైన పరిచయం చేస్తున్నారు
లూప్ ఈ కొత్త, అల్లరిగా వాక్యనిర్మాణం, పేరు బదులుగా కేవలం ఒక ప్రాథమిక కౌంటర్ ఉపయోగించి యొక్క
పాత్ర పాత్ర వెళ్ళడానికి, మేము, ఒక సమయంలో ఒక పాత్ర తీసి వెళుతున్న
ఒక సమయంలో పాత్ర మరియు మేము తెలిసిన విధంగా మేము చివరిలో ఉన్నారు
మేము అక్షరాలు కొంత సంఖ్యలో పౌరులు చేసిన లేనప్పుడు,
కానీ మేము బయటకు లాగి పాత్ర ఫైలు పాత్ర యొక్క ప్రత్యేక ముగింపు ఉంటుంది.
నేను ఈ CH కాల్, మరియు మేము అది ప్రారంభించడం వెళుతున్న - కాబట్టి మేము ద్వారా చేయవచ్చు
ఫైలు నుండి మొదటి పాత్ర పొందడానికి మా మొదటి కాల్ తో.
ఇక్కడే ఈ భాగం కాబట్టి, ఈ ఫైల్ యొక్క పాత్ర అవుట్ అన్నారు
మరియు వేరియబుల్ CH గా నిల్వ.
మేము ఫైలు చివర వచ్చేవరకు ఈ పనిని చూడాలని,
ఇది మేము ప్రత్యేక EOF పాత్ర సమానంగా లేదని పాత్ర కోసం పరీక్షించడం ద్వారా ఏమి.
బదులుగా CH చేయడం మరియు తర్వాత + +, ఇది కేవలం, విలువ పెంచడం చేస్తుంది
మేము ఫైల్ ఒక ఒక అవ్ట్, A, చెబుతున్న రాజధాని చదవండి అయితే
CH + + మాకు బి ఇస్తుంది, మరియు అప్పుడు మేము సి ఆపై d పొంది.
అంటే ఏమి స్పష్టంగా కాదు. మేము ఇక్కడ ఏమి
ఈ చివరి బిట్ లో మేము ఫైల్ నుండి తదుపరి పాత్ర పొందడానికి దీనిని చేస్తారు.
>> కాబట్టి మేము ఎలా ఫైల్ నుండి తదుపరి పాత్ర పొందడానికి ఉండవచ్చు?
మేము ఎలా ఫైల్ నుండి మొదటి పాత్ర ఎలా?
[స్టూడెంట్] fgetfile? >> Fgetc, లేదా, క్షమించండి, మీరు పూర్తిగా నిజం.
నేను అక్కడ అది తప్పుగా. అవును కాబట్టి.
ఇక్కడ బదులుగా CH చేయడం యొక్క + +,
మేము మళ్లీ fgetc (ఫైలు) కాల్ చూడాలని
మరియు మా అదే CH వేరియబుల్ ఫలితంగా నిల్వ.
[స్టూడెంట్ ప్రశ్న, అపారదర్శక]
ఈ ఫైల్ * guys ప్రత్యేక ఎక్కడ >> ఈ.
వారు పని విధంగా వారు ఉంది - మీరు మొదటి తెరిచినప్పుడు - మీరు ఆ fopen కాల్ చేసినపుడు,
FILE * సమర్థవంతంగా ఫైలు యొక్క ప్రారంభానికి ఒక పాయింటర్ గా పనిచేస్తుంది.
ఆపై మీరు fgetc కాల్ ప్రతిసారీ, ఫైలు ద్వారా ఒక పాత్ర తరలిస్తుంది.
మీరు ఈ కాల్ కాబట్టి చేసినప్పుడు, మీరు ఒక పాత్ర ద్వారా ఫైల్ పాయింటర్ పెంచడం చేస్తున్నారు.
మరియు మీరు మళ్ళీ fgetc, మీరు మరొక పాత్ర కదిలే చేస్తున్నారు
మరియు మరొక పాత్ర మరియు మరొక పాత్ర మరియు మరొక పాత్ర.
[స్టూడెంట్ ప్రశ్న, అపారదర్శక] >> ఆ that's - అవును.
ఇది హుడ్ కింద ఈ ఇంద్రజాల ఉంటాము.
మీరు ద్వారా పెంచడం ఉంచండి.
ఈ సమయంలో, మీరు అసలైన పాత్ర పని సామర్థ్యం ఉన్నప్పుడే.
కాబట్టి మేము ఎలా ఇప్పుడు, స్క్రీన్ ఈ ముద్రించాలా ఉండవచ్చు?
మేము ముందు ఉపయోగించిన అదే printf విషయం ఉపయోగించవచ్చు.
మేము అన్ని సెమిస్టర్ ఉపయోగించి చేసిన ఆ.
మేము, printf కాల్ చేయవచ్చు
మరియు మేము ఆ వంటి పాత్ర లో తరలిస్తారు.
దీన్ని మరొక విధంగా కాకుండా printf ఉపయోగించి మరియు ఈ ఫార్మాట్ స్ట్రింగ్ చేయండి అవసరం కంటే
మేము కూడా ఇతర కార్యక్రమాల్లో ఒకటి ఉపయోగించవచ్చు.
మేము స్క్రీన్ ఒక పాత్ర ముద్రిస్తుంది, ఇది fputc, ఉపయోగించవచ్చు
మేము fputc చూడండి ఉంటే తప్ప - నాకు కొద్దిగా దూరంగా తెలియజేయండి.
మేము, ఏ నైస్ దీనిని మేము fgetc ఉపయోగించి చదవాలి పాత్ర లో తీసుకుంటుంది చూడండి
కానీ అప్పుడు మేము దానికి ముద్రించడానికి ప్రవాహం ఇవ్వాల్సి ఉంటుంది.
మేము కూడా ప్రామాణిక అవుట్ నేరుగా ప్రదర్శించాలి ఇది putchar ఫంక్షన్ ఉపయోగించవచ్చు.
కాబట్టి మేము ముద్రణా ఉపయోగించే వివిధ ఎంపికలు పూర్తి అక్కడ చాలా ఉన్నాయి.
వారు ప్రామాణిక I / O లైబ్రరీలో ఉన్నాము.
మీరు ముద్రించడానికి కావలసినప్పుడు - కాబట్టి printf, డిఫాల్ట్గా, స్ట్రీమ్ను ప్రత్యేక ప్రమాణాన్ని ముద్రిస్తుంది
ఆ stdout ఇది.
కాబట్టి మేము ఈ మాయా విలువ, ఇక్కడ stdout రకం గా సూచించవచ్చు.
అయ్యో. బయట సెమికోలన్ ఉంచండి.
>> ఈ ఇక్కడ కొత్త, అల్లరిగా సమాచారం చాలా ఉంది.
ఈ చాలా ఈ కోడ్ అనేది చాలా idiomatic ఉంది
ఇది చదవడానికి సులభంగా చదవటానికి క్లీన్ ఉంది కనుక ఈ విధంగా రాసిన దానిని.
దీన్ని అనేక మార్గాలు, మీరు ఉపయోగించవచ్చు అనేక విధులు ఉన్నాయి
కానీ మేము కేవలం మరియు పైగా ఈ మాదిరి అనుసరించండి ఉంటాయి.
మీరు మళ్లీ మళ్లీ వస్తోంది ఈ వంటి కోడ్ చూడండి చేస్తే ఆశ్చర్యం లేదు.
అన్ని కుడి. ఈ సమయంలో, మేము రోజు బ్రేక్ అవసరం.
ధన్యవాదాలు. మీరు ఆన్లైన్లో ఉంటే చూస్తూ ధన్యవాదాలు. మరియు మేము వచ్చే వారం మీరు చూస్తారు.
[CS50.TV]