[Powered by Google Translate] [பகுதி 5: குறைந்த வசதியாக]
[நேட் Hardison, ஹார்வர்ட் பல்கலைக்கழகம்]
[இந்த CS50 உள்ளது.] [CS50.TV]
எனவே நண்பர்களே, மீண்டும் வரவேற்க.
பகுதி 5 வரவேற்கிறது.
இந்த கட்டத்தில், வினாடி வினா 0 முடித்தவர்களுக்கு மற்றும் நீ செய்தது எப்படி பார்த்து கொண்டு,
நான் மிகவும் இந்த பகுதியில் மதிப்பெண்களை தாக்கம் காரணமாக வட்டம் நீங்கள் உண்மையில் நன்றாக.
எங்கள் ஆன்லைன் பார்வையாளர்கள், நாம் கேள்விகள் ஒரு ஜோடி இருந்தது
பிரச்சனை செட் கடந்த இரண்டு பிரச்சினைகள் பற்றி - அல்லது வினாடி வினா மீது, மாறாக.
எனவே நாம் எல்லோரும் என்ன நடந்தது பார்க்கும் அளவுக்கு மிகவும் விரைவாக அந்த வழியாக செல்ல போகிறோம்
மற்றும் பதிலாக தான் தீர்வு தன்னை பார்க்க விட உண்மையான தீர்வு செல்ல எப்படி.
நாங்கள், உண்மையில் விரைவாக பிரச்சினைகளை கடந்த சில மேல் செல்ல 32 மற்றும் 33 போகிறோம்.
இப்போது, மீண்டும், அதனால் ஆன்லைன் பார்வையாளர்கள் இந்த பார்க்கலாம்.
>> நீங்கள் பக்கம் 13 அது உங்கள் பிரச்சினை 32, திரும்ப வேண்டும்
16 13, பிரச்சனை 32 அனைத்து பரிமாற்றங்கள் பற்றி.
இது இரண்டு முழு மாற்றம் பற்றி அனைத்து இருந்தது.
அதை நாம் விரிவுரையில் இரண்டு முறை மீது போயிருந்தேன் அது தான் பிரச்சனை.
இங்கு, நாம் என்ன செய்ய கேட்டு ஒரு விரைவு நினைவகம் சுவடு உள்ளது.
அவர்கள் ஸ்டாக் இருக்கும், மாறிகளின் மதிப்புகளை நிரப்பவும்
குறியீடு இந்த இடமாற்று செயல்பாடு மூலம் செல்லும் என.
குறிப்பாக, நாம் பார்த்து வருகிறோம் - I'm இந்த ஐபாட் கீழே போடமாட்டேன் -
குறிப்பாக, நாம் பார்த்து வருகிறோம் இந்த வரி இங்கே 6 சரியான எண் தான்.
இது முந்தைய பிரச்சினை தான் அருகில் இருத்தல் 6 எண்.
நாம் என்ன செய்ய வேண்டும் நினைவக நிலை காண்பிக்க அல்லது லேபிள்
அதை நாம் இந்த வரி எண் 6 இயக்க நேரத்தில் உள்ளது, என்று
இது திறமையுடன் இங்கே நம் இடமாற்று செயல்பாடு இருந்து திரும்ப உள்ளது.
நாம் இங்கே கீழே இருந்தால், நாம் நினைவகத்தில் எல்லாம் முகவரிகள் நமக்கு வழங்கப்படும் என்று பார்த்தேன்.
இந்த மிக முக்கியமான, நாங்கள் ஒரு நொடியில் அது திரும்பி விடுவேன்.
பின்னர் கீழே இங்கே கீழே, நாம் குறிப்பிட போகிறோம் என்று ஒரு சிறிய நினைவகம் வரைபடம் இருந்தது.
நான் உண்மையில் என் ஐபாட் இந்த அவுட் செய்யவில்லை.
அதனால் நான் குறிப்பிற்கு ஐபாட் மற்றும் இந்த குறியீடு இடையே முன்னும் பின்னுமாக நாள் மாற்றி போகிறேன்.
>> ஆரம்பிப்போம். முதல், வலது இங்கே முக்கிய வரிகளை முதல் இரண்டு கவனம் செலுத்த வேண்டும்.
துவக்க, நாம் 2 1 மற்றும் y செய்ய x துவக்க போகிறோம்.
நாம் இரண்டு முழு மாறிகள் இருக்கிறது, அவர்கள் ஸ்டாக் வைக்க போகிறோம் இரு.
நாம் ஒரு 1 மற்றும் 2 வைக்க போகிறோம்.
நான் என் ஐபாட் மீது கவிழ்த்து என்றால், வட்டம், நாம் பார்ப்போம் -
ஆப்பிள் டிவி பிரதிபலிப்புக்கு, மற்றும் அங்கு நாம். சரி.
நான் என் ஐபாட் மீது கவிழ்த்து இருந்தால்,
நான் 2 1 மற்றும் y செய்ய x துவக்க வேண்டும்.
நாம் x குறித்தது பெட்டியில் ஒரு 1 எழுதுவதன் மூலம் மிக எளிதாக செய்ய
மேலும் பெட்டியில் ஒரு 2 y குறித்தது. மிகவும் எளிமையான.
எனவே இப்போது மடிக்கணினி திரும்பி செல்லலாம், அடுத்த என்ன நடக்கிறது என்று பார்க்கலாம்.
விஷயங்களை தந்திரமான இங்கு இந்த அடுத்த வரிசை தான்.
நாம் அளவுருக்கள் x முகவரி மற்றும் y முகவரி கடந்து இடமாற்று செயல்பாடு ஒரு மற்றும் ப.
x மற்றும் y முகவரி முகவரி நாம் கணக்கிட முடியாது என்று விஷயங்கள்
இந்த புல்லட் குறிப்பிட்டு இல்லாமல் இங்கே சரியான கீழே சுட்டிக்காட்டியுள்ளது.
மற்றும் அதிர்ஷ்டவசமாக, முதல் இரண்டு புல்லட் புள்ளிகள் பதில்கள் உள்ளன சரியாக என்ன சொல்ல.
நினைவகத்தில் x முகவரி 10, மற்றும் நினைவகத்தில் y முகவரி 14.
எனவே அந்த என நிறைவேறுவது என்று மதிப்புகள் ஒரு நமது இடமாற்று விழாவில் வரை மேல் ப.
எனவே மீண்டும், எங்கள் வரைபடம் மீண்டும் மாறுவதற்கு, நான் ஒரு ஒரு 10 எழுதலாம்
ப மற்றும் ஒரு 14.
நாம் இடமாற்று தொடர அங்கு இப்போது, இந்த புள்ளி ஆகும்.
எனவே, மீண்டும் மடிக்கணினி மீண்டும் புரட்டுகிறது
நாம் இடமாற்று வேலை வழி tmp ஒரு மற்றும் கடை விளைவாக நான் முதல் dereference என்று பார்க்க.
எனவே dereference ஆபரேட்டர் ஏ ", என்கிறார். ஒரு முகவரி மாறி ஒரு உள்ளடக்கங்களை டிரீட்.
அந்த முகவரியில் சேமிக்கப்படும் என்ன சென்று, அதை ஏற்ற. "
என்ன மாறி வெளியே ஏற்ற எங்கள் tmp மாறி சென்று சேமித்து வைக்க போவதில்லை.
ஐபாட் மீண்டும் புரட்டுகிறது.
நாங்கள் 10 உரையாற்ற சென்றால், நாங்கள் முகவரி 10 varible x என்று
நாம் நினைவில் x முகவரி 10 என்று எங்கள் புல்லட் பாயிண்ட் மூலம் கூறினார் ஏனெனில்.
எனவே, நாங்கள் எங்கள் iPad இல் பார்க்க போல், அங்கு சென்று 1 இது தான் மதிப்பு, பெற முடியும்
அந்த tmp இந்த ஏற்ற.
மீண்டும், இந்த இறுதி உள்ளடக்கங்களை அல்ல.
நாம் நடக்க போவதை நாம் இறுதியில் திட்டம் நம் இறுதி மாநில கிடைக்கும்.
ஆனால் இப்போது, நாம் tmp சேமிக்கப்படும் மதிப்பு 1 வேண்டும்.
>> மற்றும் இங்கு ஒரு விரைவு கேள்வி இருக்கிறது.
[அலெக்சாண்டர்] dereference ஆபரேட்டர் இல்லை - என்று மட்டும் மாறி முன் நட்சத்திர சரி?
>> ஆமாம். நாங்கள் மீண்டும் எங்கள் மடிக்கணினி மீண்டும் கவிழ்த்து என, dereference ஆபரேட்டர் எனவே
வலது முன் இந்த நட்சத்திரம்.
என்ற அர்த்தத்தில், அது - நீங்கள் பெருக்கல் ஆபரேட்டர் அதை மாறாக
இதில் இரண்டு விஷயங்கள் தேவை; dereference ஆபரேட்டர் ஒரு ஒரும ஆபரேட்டர் உள்ளது.
ஒரு பைனரி ஆபரேட்டர் பதிலாக ஒரு மதிப்பு பயன்படுத்தப்படும்,
நீங்கள் இரண்டு வெவ்வேறு மதிப்புகள் விண்ணப்பிக்க வேண்டும்.
அதனால் இந்த வரிசையில் நடக்கும்.
நாம் மதிப்பு 1 ஏற்ற எங்கள் தற்காலிக முழு எண் மாறி அதை சேமித்து.
அடுத்த வரியில், நாங்கள் ஒரு ப உள்ளடக்கங்களை சேமிக்க -
அல்லது, மாறாக, நாம் ப ஒரு சுட்டி காட்டியது அமைந்துள்ள இடத்தில் சுட்டி காட்டியது என்று உள்ளடக்கத்தை சேமிக்க.
நாம் இடது வலது இந்த ஆய்வு என்றால், நாங்கள், dereference ப போகிறீர்கள்
நாங்கள் 14 உரையாற்ற போகிறோம், நாம், இல்லை என்று முழு கைப்பற்ற போகிறோம்
பின்னர் நாம், முகவரி 10 செல்கிறோம்
நாம் அந்த இடத்தில் ப எங்கள் dereference விளைவாக தூக்கி செல்கிறார்கள்.
நாம் இந்த ஒரு சிறிய இன்னும் உறுதியான செய்ய முடியும் நம் ஐபாட், மீண்டும் புரட்டுகிறது,
நான் இங்கே முகவரிகள் அனைத்து எண்கள் எழுத அது உதவலாம்.
எனவே y நேரத்தில், நாம் முகவரியை 14 என்று, x முகவரி 10 உள்ளது.
நாம் ப மணிக்கு தொடங்கும் போது, நாம் dereference ப, நாம் மதிப்பு 2 கைப்பற்ற போகிறோம்.
நாங்கள் அந்த முகவரிக்கு 14 வாழ்கிறார் என்று மதிப்பு ஏனெனில் இந்த மதிப்பு கைப்பற்ற போகிறோம்.
நாம், முகவரி 10 வாழ்கிறார் என்று மாறி அதை வைத்து போகிறாய்
இது எங்கள் மாறி x தொடர்பான, சரியான உள்ளது.
நாம் இங்கே மேற்சேர்க்கை சிறிது செய்ய முடியும்
நாம் 1 விடுவித்தாக மற்றும் பதிலாக நாம் ஒரு 2 எழுத வேண்டும்.
எனவே நாம் இப்போது மறைந்து x நான் கூட, நன்கு மற்றும் உலகின் நல்லது.
நாம் tmp மாறி x பழைய மதிப்பு சேமிக்கப்படும்.
எனவே அடுத்த வரி இடமாற்று முடிக்க முடியும்.
எங்கள் மடிக்கணினி மீண்டும் புரட்டுகிறது.
இப்போது அந்த எஞ்சியுள்ள எமது தற்காலிக முழு எண் மாறி உள்ளடக்கங்களை எடுத்து உள்ளது
மற்றும் கேட்ச் பிடித்து என்று முகவரியில் வசித்து என்று மாறி அவற்றை சேமிக்க.
எனவே நாம் மாறி அணுகலை பெற திறம்பட dereference ப போகிறாய்
என்று, ப அதை வைத்திருக்கும் முகவரி உள்ளது
நாம் tmp அதை வைத்திருக்கும் மதிப்பு விஷயங்களுடன் போகிறோம்.
மீண்டும் ஐபாட் மீண்டும் புரட்டுகிறது.
நான், இங்கே 2 இந்த மதிப்பு அழிக்க முடியும்
அதற்கு பதிலாக நாம் அது தொடர்பாக 1 உரிமை நகலெடுக்க வேண்டும்.
பிறகு நிச்சயமாக இயக்கும் அடுத்த வரியில், -
நாம் லேப்டாப் மீண்டும் கவிழ்த்து என்றால் - இந்த புள்ளி 6
நாம் வரைபடம் முற்றிலும் பூர்த்தி செய்யவேண்டும் என விரும்பினேன், அந்த சமயத்தில் அது.
எனவே ஐபாட் மீண்டும் குலுக்கல் முறை, இப்போது நீ, நிறைவு வரைபடம் பார்க்க முடியும்
நாம் x ஒரு 10, ப 14, tmp ஒரு 1, 2, மற்றும் y ஒரு 1 வேண்டும் என்று பார்க்கலாம்.
இதை பற்றி எந்த கேள்விகள் உள்ளன?
இது வழியாக நடந்து கொண்டு, இன்னும் உணர்வை ஏற்படுத்தும்?
குறைந்த பயன்? வட்டம் இல்லை. சரி.
>> சுட்டிகள் மிகவும் தந்திரமான உட்பட்டவை.
நாம் வேலை நண்பர்களே ஒரு மிக பொதுவான கூற்று உண்டு:
"சுட்டிகள் புரிந்து கொள்ள, நீங்கள் முதல் சுட்டிகள் புரிந்து கொள்ள வேண்டும்."
இதில் நான் மிகவும் உண்மை என்று. அதை பயன்படுத்தி கொள்ள ஒரு எடுத்து இல்லை.
, மிகவும் பயனுள்ளதாக இருக்கும், படங்கள் நிறைய வரைய இது போன்ற நினைவக வரைபடங்களை நிறைய வரைய
நீங்கள் எடுத்துக்காட்டாக பிறகு எடுத்துக்காட்டாக பின்னர் உதாரணம் மூலம் நடக்க பிறகு,
அது இன்னும் சிறிது உணர்வு மற்றும் இன்னும் கொஞ்சம் உணர்வு மற்றும் இன்னும் கொஞ்சம் உணர்வு செய்ய தொடங்க வேண்டும்.
இறுதியாக, ஒரு நாள், நீங்கள் எல்லாம் முற்றிலும் நிபுணத்துவம் வேண்டும்.
நாம் அடுத்த பிரச்சனை செல்ல? எந்த கேள்விகளை முன் எல்லாம் சரி.
எனவே மடிக்கணினி மீண்டும் புரட்ட.
நாம் அடுத்த பிரச்சனை சிக்கல் எண் 33 கோப்பு உள்ளது I / O
இந்த சிறிது மீது பெரிதாக்கவும்.
பிரச்சனை 33 - ஆம்?
>> [டேனியல்] நான் ஒரு விரைவு கேள்வி இருந்தது. இந்த நட்சத்திரம், அல்லது நட்சத்திர,
நீங்கள் முன்பு ஒரு நட்சத்திர பயன்படுத்த போது dereferencing என்று.
நீங்கள் முன் ampersand பயன்படுத்த போது அதற்கு பெயரென்ன என்று?
>> Ampersand முன் முகவரியை-ன் ஆபரேட்டர் உள்ளது.
எனவே வரை மீண்டும் உருட்டும் நாம்.
Oops. நான் என்னால் உண்மையிலேயே சுருள் இல்லை ஜூம் முறையில் நான்.
நாங்கள் இங்கே உண்மையில் விரைவில் இந்த குறியீடு பார்த்தால்,
மீண்டும், அதே நடக்கிறது.
நாம் இங்கேயே இந்த குறியீடு பார்த்தால், இந்த வரிசையில் நாம் அழைப்பு, இடமாற்றம் செய்ய அங்கு
ampersand தான் "முகவரி இது மாறி x வாழ்க்கை கிடைக்கும்." என்று
உங்கள் தொகுப்பி உங்கள் குறியீடு தொகுக்கும் போது,
அது உண்மையில் உடல் வாழ உங்கள் மாறிகள் அனைத்து நினைவகம் ஒரு இடத்தில் அவுட் குறிக்க வேண்டும்.
அதை எல்லாம் தொகுக்கப்பட்ட முறை மற்றும் தொகுப்பி பிறகு, என்ன செய்ய முடியும்
அது "ஓ, நான் முகவரி 10 x வைத்து. நான் முகவரி 14 y வைத்து.", என்று
அது நீங்கள் இந்த மதிப்புகள் பூர்த்தி செய்யலாம்.
உனக்கு - அது போல் மற்றும் பாஸ் & y இந்த கடத்தலாம்.
இந்த பாடல் முகவரியை பெற, ஆனால் அவர்கள் கூட, நீங்கள் இடமாற்று செயல்பாடு அவற்றை கடந்து
இந்த வகை தகவல், சரியான இங்கே இந்த எண்ணாக *, ஒடுக்கி சொல்கிறது
"சரி, நாம் ஒரு முழு எண் மாறி ஒரு முகவரியை இந்த முகவரியை புரிந்து கொள்ள போகிறோம்."
ஒரு முழு எண்ணாக ஒரு முகவரி, எந்த ஒரு கேரக்டர் மாறி முகவரி வேறுபட்டது
ஒரு முழு எண்ணாக ஒரு 32 பிட் கணினியில், எடுத்து ஏனெனில், இடத்தை 4 பைட்டுகள் எடுத்து
ஒரு பாத்திரம் மட்டுமே இடம் 1 பைட் எடுத்து அதேசமயம்.
அது என்ன தெரியுமா முக்கியமானது - வாழ்ந்து என்ன, மதிப்பு என்ன வகை
உள்ளே கடந்து விட்டது முகவரியில் வாழ்க்கை
நீங்கள் கையாளும் என்று அல்லது முகவரி.
அந்த வகையில், நீங்கள் எவ்வளவு பைட்டுகள் தகவல் உண்மையில் உங்கள் RAM வெளியே ஏற்ற தெரியும்.
பின்னர், ஆம், நீங்கள் இந்த dereference ஆபரேட்டர், கேட்டு
சென்று ஒரு குறிப்பிட்ட முகவரியில் தகவல் அணுகுகிறது.
அது இங்கே இந்த ஒரு மாறி கொண்டு, மியூச்சுவல் ஒரு முகவரி போன்ற உள்ளடக்கங்களை சிகிச்சை,
அந்த முகவரிக்கு சென்று, வெளியே இழுக்க, ஒரு பதிவு என்ற செயலி, சுமை ஏற்ற
உண்மையான மதிப்புகள் அல்லது அந்த முகவரியில் வசிக்கும் உள்ளடக்கங்களை.
மேலும் எந்த கேள்விகளையும்? இந்த நல்ல கேள்விகள் உள்ளன.
இது மிகவும் புதிய சொற்களை நிறைய இருக்கிறது.
அது வெவ்வேறு இடங்களில் & மற்றும் * பார்த்து, மேலும் பங்கி என்ன தான்.
>> எல்லாம் சரி.
அதனால் மீண்டும் பிரச்சனை 33, தாக்கல் நான் த / பெ
இந்த விஷயங்கள் ஒரு ஜோடி நடந்தது என்று அந்த பிரச்சினைகள் இருந்தது.
ஒரு, இது ஒரு மிகவும் புதிய தலைப்பு தான்.
இது, வினாடி வினா முன் அழகான விரைவில் வழங்கப்பட்டது
பின்னர் நான் கணித அந்த வார்த்தை பிரச்சினைகள் போன்ற வகையான என்று
அவர்கள் உங்களுக்கு தகவல் நிறைய கொடுக்க, ஆனால் நீங்கள் உண்மையில் அது ஒரு டன் பயன்படுத்த கொண்ட முடிவடையும் இல்லை.
இந்த பிரச்சினை முதல் பகுதி CSV கோப்பு என்ன விவரிக்கிறார்.
இப்போது, CSV கோப்பு, விளக்கம் படி, ஒரு மதிப்புகள் கோப்பு.
இந்த அனைத்து சுவாரசியமான இருக்கும் காரணம், நீங்கள் எப்போதும் அவற்றை பயன்படுத்த காரணம்,
ஏனெனில், எப்படி பல எப்போதும் எக்செல் போன்ற பொருட்களை பயன்படுத்த வேண்டும்?
, ஒருவேளை, அல்லது உங்கள் வாழ்வில் சில புள்ளியில் பயன்படுத்தும் நீங்கள் மிக படம்.
நீங்கள் Excel போன்ற ஏதாவது பயன்படுத்த வேண்டும்.
ஒரு எக்ஸ்செல் விரிதாளின் தரவு வெளியே அல்லது அதை செயலாக்க எந்த செய்ய வேண்டும்,
நீங்கள் ஒரு சி நிரல் அல்லது பைதான் நிரல், ஜாவா நிரல், எழுத விரும்பினால்
நீங்கள் அங்கு சேமித்து தரவு சமாளிக்க,
இது வெளியே பொதுவான வழிகளில் ஒன்று CSV கோப்பு உள்ளது.
நீங்கள், உரையாடலை 'என சேமி' சென்று போது நீங்கள் எக்செல் திறக்க முடியும்
நீ ஒரு உண்மையான CSV கோப்பு அவுட் பெற முடியும்.
>> இந்த விஷயங்கள் பற்றி எப்படி தெரியும் எளிது.
அது வேலை செய்யும் விதம் போன்ற என்று தான் - அதாவது, அது அடிப்படையில், ஒரு விரிதாள் பின்பற்றும்
அங்கு, நாம் இங்கே பார்க்க போல், மிக விட்டு, மிக சிறிய,
நாம் கடந்த பெயர்கள்.
எனவே நாம் Malan, Hardison, பின்னர் Bowden, 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 முறையில் அதை திறக்கும், மற்றும் நாம் செய்ய சென்ற என்று தான்
கோப்பு ஊழியர்கள் அமைப்பு எழுத.
மேலும், நான் ஐபாட் பயன்படுத்த வேண்டாம், நாம் பார்ப்போம்?
நான் ஐபாட் பயன்படுத்த வேண்டும். நாம் வெற்றிடத்தை வேண்டும் - நான் ஒரு சிறிய சிறப்பாக எழுத முடியும் அட்டவணை இந்த போடலாம் -
வாடகை களைவதற்கு இது, ஒரு வாதத்தை உள்ள கள் என்று ஒரு பணியாளர் அமைப்பு ஆகும்.
எங்கள் ப்ரேஸ் தான், நாம், கோப்பு என்று நம் கோப்பு * கிடைத்துவிட்டது
நாம், நமக்கு கொடுக்கப்பட்ட எங்கள் fopen வரி இல்லை
இது pedia ஏற்கனவே இருந்து நான் புள்ளிகள் அதை எழுத வேண்டும்.
பின்னர் எமது அடுத்த வரியில், நாம் fprintf ஒரு அழைப்பு செய்ய போகிறோம்
நாம், நாம் அச்சிட வேண்டும் என்று கோப்பில் கடந்து போகிறாய்
பின்னர் எங்கள் வடிவம் சரம், அது -
நான் உங்களுக்கு இது போல் என்ன சொல்ல தெரியப்படுத்துவோம்.
எப்படி நீங்கள் பற்றி, ஸ்டெல்லா? நீங்கள் வடிவம் சரம் முதல் பகுதி போல் என்ன தெரியுமா?
[ஸ்டெல்லா] நிச்சயமாக இல்லை. >> ஜிம்மி ask தாராளமாக.
நீங்கள், ஜிம்மி தெரியுமா?
[ஜிம்மி] இது கடைசி வேண்டுமா? எனக்கு தெரியாது. நான் முற்றிலும் உறுதியாக இல்லை.
சரி >>. எப்படி, யார் தேர்வு இந்த சரியான கிடைத்ததா?
சரி, இல்லை.
அதை இங்கே நாம் செய்ய வேண்டிய அனைத்து எங்கள் ஊழியர்கள் அமைப்பு ஒவ்வொரு பகுதியாக வேண்டும் என்று மாறிவிடும்
எங்கள் கோப்பில் ஒரு சரம் போன்ற அச்சு வேண்டும்.
நாங்கள் கடைசி பெயர் இல்லை, ஏனெனில் நாங்கள் சரம் மாற்று தன்மையை மூன்று வெவ்வேறு முறை பயன்படுத்த
கமா தொடர்ந்து, பின்னர் முதல் பெயர், ஒரு கமா தொடர்ந்து
பின்னர் இறுதியாக எந்த மின்னஞ்சல் முகவரியை தொடர்ந்து - இது
என் திரையில் பொருத்தப்படும் - ஆனால் அது ஒரு வரியில் முடிவதற்கு சற்று தன்மையை தொடர்ந்து தான்.
அதனால் நான் அங்கே அதை எழுத போகிறேன்.
பின்னர், எங்கள் வடிவம் சரம் தொடர்ந்து
நாம் இப்போது நாங்கள் டாட் குறியீடு பயன்படுத்தி அணுக இதில், மாற்று இல்லை
நாம் சிக்கல் தொகுப்பு 3 இல் பார்த்தேன் என்று.
நாம் s.last, s.first, மற்றும் s.email பயன்படுத்தலாம்
எங்கள் வடிவம் சரம் கொண்டு அந்த மூன்று மதிப்புகள் பதிலாக.
அதனால் எப்படி போனீர்கள்? இதில்?
ஆமாம்? இல்லை? ஒருவேளை? சரி.
>> நாம் அச்சிடப்பட்ட நாங்கள் எங்கள் கோப்பை திறந்து பிறகு பிறகு நாம் அந்த இறுதி விஷயம்:
நாம் ஒரு கோப்பு திறந்து விட்டேன் போதெல்லாம், நாங்கள் எப்போதும் அதை மூட நினைவில் கொள்ள வேண்டும்.
இல்லையெனில் நாம் நினைவக கசிவு முடிவுக்கு வேண்டும், ஏனெனில்,
கோப்பு விளக்கிகளை பயன்படுத்தி.
நாம் அது செயல்பாட்டை பயன்படுத்த வேண்டாம், அதை மூட? டேனியல்?
[டேனியல்] fclose? சரியாக >> fclose,.
எனவே இந்த பிரச்சினை கடைசி பகுதியாக, fclose செயல்பாட்டை பயன்படுத்தி, கோப்பு சரியாக மூட வேண்டும்
இது தான் என்று தெரிகிறது.
மிகவும் வேடிக்கையான இல்லை.
Cool.
அந்த வினாடி வினா மீது பிரச்சனை 33 தான்.
நாங்கள் I / O வரும் நிச்சயமாக இன்னும் கோப்பு வேண்டும்.
நாம், இன்று விரிவுரையில் சற்று செய்ய, அல்லது பிரிவில் வேண்டும்
இந்த புதிய pset பெருமளவு அமைக்க நடக்கிறது என்ன காரணம்.
இந்த கட்டத்தில் வினாடி வினா இருந்து செல்லலாம். ஆமாம்?
>> [சார்லோட்]] ஏன் பதிலாக fclose என்ற fclose (கோப்பு) (staff.csv)?
>> ஆ. அது மாறிவிடும் என்பதால் - நிறைய கேள்வி, ஒரு பெரிய அதில் ஒன்று தான்,
ஏன், நாம் fclose எழுத போது, நாம் fclose (கோப்பு) நட்சத்திரம் மாறி எழுதி
கோப்பு பெயர், staff.csv எதிர்ப்பு? அந்த சரியானதா? Yeah.
எனவே ஒரு பார்க்கலாம். நான் என் மடிக்கணினி மீண்டும் மாற வேண்டும்,
மற்றும் நாட்டின் fclose விழாவில் பார்போம்.
எனவே, fclose செயல்பாடு ஒரு ஸ்ட்ரீம் மூடிவிட்டு, அதை நாம் மூட வேண்டும் என்று தகவலரங்கத்தில் சுட்டிக்காட்டி எடுத்து
நாம் மூட வேண்டும் என்று உண்மையான கோப்பு பெயர் எதிர்க்கும்.
இந்த காரணத்தால், திரைக்கு பின்னால், நீங்கள் fopen ஒரு அழைப்பை போது, தான்
நீங்கள் ஒரு கோப்பை திறந்து போது, நீங்கள் உண்மையில் கோப்பு பற்றிய தகவல்களை சேமிக்க நினைவக ஒதுக்கீடு.
எனவே, கோப்பு பற்றிய தகவல்களை கொண்டுள்ளது கோப்பு சுட்டிக்காட்டி உள்ளது
அதை திறக்க போன்ற, நீங்கள் கோப்பு தற்போது எங்கே அதன் அளவு,
நீங்கள் படித்து மற்றும் கோப்பு உள்ள குறிப்பிட்ட இடத்திற்கு அழைப்புகள் எழுதி வைக்க முடியும் என்று.
நீங்கள் கோப்பு பெயருக்கு பதிலாக, மூடிய சுட்டிக்காட்டி மூட முடியும்.
>> ஆமாம்? [டேனியல்] எனவே வாடகை பயன்படுத்த, நீங்கள் சொல்ல முடியும் - அது எப்படி பயனர் உள்ளீடு விடுகிறது?
Fprintf இது பயனர் உள்ளீடு காத்திருப்பேன் என்ற அர்த்தத்தில் GetString போல்
நீங்கள் இந்த தட்டச்சு ask - அல்லது நீங்கள் இந்த மூன்று விஷயங்களை தட்டச்சு காத்திருக்க?
அல்லது நீங்கள் வாடகை செயல்படுத்த ஏதாவது பயன்படுத்த வேண்டும்?
>> சரி. நாங்கள் இல்லை - கேள்வி, எப்படி நாம் பயனர் உள்ளீடு கிடைக்கும் என்று
வாடகை செயல்படுத்தப்பட்டதின்? மற்றும் நாம் இங்கே இல்லை, வாடகை மற்றும் அழைப்பவர் உள்ளது
ஏற்கனவே 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", என்கிறார் அந்த குறியீடு இந்த வரி நகல்.
நான் அதை நகலெடுத்து போகிறேன்.
நான் என் சாதனம் வழியாக செல்ல போகிறேன், நீங்கள், நான் செய்து பார்க்கலாம் அவுட் பெரிதாக்கவும்
அங்கு அதை ஒட்டி, நான் Enter விசையை போது, இந்த wget கட்டளை மொழியில் ஒரு இணைய பெற வேண்டும்.
இது, இணைய இந்த கோப்பு ஆஃப் இழுத்து நடக்கிறது
அது தற்போதைய அடைவு அதை காப்பாற்ற நடக்கிறது.
நான் என் தற்போதைய அடைவு பட்டியலிட இப்போது நீங்கள் நான் அங்கு இந்த section5.zip கோப்பு பெற்றுவிட்டோம் என்று பார்க்கலாம்.
அந்த பையன் சமாளிக்க வழி, அது zip கோப்பை திறக்க உள்ளது
நீங்கள் இப்படியே, கட்டளை வரியில் செய்ய முடியும்.
Section5.zip.
அது zip கோப்பை திறக்க வேண்டும் என்று, எனக்கு கோப்புறையை உருவாக்க
அனைத்து உள்ளடக்கங்களை உயர்த்துவதற்காக, அங்கு அவர்களை வைத்து.
எனவே இப்போது நான் சிடி கட்டளையை பயன்படுத்தி என் பகுதி 5 அடைவில் செல்லலாம்.
தெளிவான பயன்படுத்தி திரையில் தெளிவாக. எனவே திரையில் தெளிவாக.
இப்போது நான் சமாளிக்க ஒரு நல்ல சுத்தமான முனையம் கிடைத்துவிட்டது.
>> நான் இந்த அடைவில் பார்க்க அனைத்து கோப்புகள், பட்டியலிட இப்போது நீங்கள்
buggy1, buggy2, buggy3, மற்றும் buggy4: நான் நான்கு கோப்புகளை பெற்றுவிட்டோம் என்று பார்க்க.
நான் அதற்கான. கேட்ச் கோப்புகளை கிடைத்துவிட்டது.
நாம் இப்போது. கேட்ச் கோப்புகளை பார்க்க போவதில்லை.
அதற்கு பதிலாக, நாம் GDB திறந்து அவற்றை பயன்படுத்த போகிறோம்.
நாம் GDB பயன்படுத்தும் போது நாம், நாம் உண்மையான மூல குறியீடு அணுகல் அதனால் அவர்களை சுற்றி வைத்திருக்கிறேன்
ஆனால் பகுதியில் இந்த பகுதியை இலக்கு GDB சுற்றி டிங்கர் உள்ளது
நாம் இந்த நான்கு தரமற்ற திட்டங்கள் ஒவ்வொரு தவறு என்ன நடக்கிறது கண்டுபிடிக்க முடியும் என்பதை பார்க்க.
எனவே தான், உண்மையில் விரைவாக அறைக்கு போகிறாய்
மற்றும் நான், தரமற்ற திட்டங்கள் ஒரு இயக்க கேட்பது போகிறேன்
பின்னர், நாம் GDB மூலம் ஒரு குழுவாக செல்ல வேண்டும், மற்றும் நாம் இந்த திட்டங்களை சரி செய்ய என்ன செய்ய முடியும் என்று பார்க்கிறேன்
அல்லது குறைந்த பட்சம் அவர்கள் ஒவ்வொரு தவறு என்ன நடக்கிறது அடையாளம்.
டேனியல் இங்கு ஆரம்பிப்போம். நீங்கள் buggy1 இயங்கும்? என்ன நடக்கிறது என்று பார்ப்போம்.
[டேனியல்] இது ஒரு பயன்பாடு தவறு இல்லை என்கிறார். >> சரி. சரியாக.
நான் buggy1 ரன் என்றால், நான் ஒரு நொடி தவறு தான்.
இந்த கட்டத்தில், நான், போய் buggy1.c திறக்க முடியவில்லை
, முயற்சி மற்றும் தவறு என்ன நடக்கிறது கண்டுபிடித்தார்கள்
ஆனால் இந்த நொடி தவறு பிழை பற்றி மிகவும் அருவருப்பான விஷயங்கள் ஒரு
இது நிரல் விஷயங்கள் வரி உண்மையில் தவறு மற்றும் உடைத்து என்ன சொல்ல இல்லை என்று.
நீங்கள் வகையான குறியீடு பார்க்க வேண்டும்
மற்றும் யூகம் பயன்படுத்தி கண்டுபிடிக்க மற்றும் சோதிக்க அல்லது printf தவறு என்ன நடக்கிறது என்பதை.
GDB பற்றி சிறந்த விஷயங்கள் ஒரு அது உண்மையில் மிகவும் எளிது
வரி கண்டுபிடிக்க இது உங்கள் நிரல் செயலிழந்தால் மணிக்கு.
இது முற்றிலும் கூட தான் என்று இருந்தால், அதை பயன்படுத்த மதிப்புள்ள.
எனவே GDB வரை துவக்க, நான் GDB தட்டச்சு, பிறகு நான் இயக்க வேண்டும் என்று இயங்கக்கூடிய அது பாதை கொடுக்க.
இங்கே நான் gdb ஐ ./buggy1 தட்டச்சு.
Enter விசையை. என்னை இந்த காப்புரிமை தகவல் கொடுக்கிறது
கீழே இங்கே நீங்கள் ", / வீட்டில் / இருந்து படித்தல் குறியீடுகள் சொல்வது இந்த வரிசையில் பார்க்கலாம்
jharvard/section5/buggy1. "
எல்லாம் நன்றாக நடந்தால் மற்றும், நீங்கள் இந்த மாதிரி ஒரு செய்தியை அச்சிட பார்க்கிறேன்.
அது குறியீடுகளை படிக்க வேண்டும், அது "நான், உங்கள் செயல்படும் கோப்பை இருந்து குறியீடுகளை படித்து வருகிறேன்" சொல்கிறேன்
பின்னர் அதை இங்கு இந்த "செய்து" செய்தி சாப்பிடும்.
இந்த சில மற்ற வேறுபாடுகள் பாருங்கள், அல்லது நீங்கள் பார்த்தால் அது குறியீடுகளை கண்டறிய முடியவில்லை
அல்லது அப்படி ஒன்று, என்ன அர்த்தம் நீங்கள் ஒழுங்காக உங்கள் இயங்கக்கூடிய தொகுக்கப்பட்ட இல்லை என்று.
நாம் GDB பயன்படுத்த திட்டங்கள் தொகுக்க போது, நாம், அந்த சிறப்பு கிராம் கொடி பயன்படுத்த வேண்டும்
நீங்கள் உங்கள் திட்டங்களை தொகுக்க வேண்டும் என்று நான் செய்ய தட்டச்சு, முன்னிருப்பாக முடிந்தது
அல்லது தரமற்ற அல்லது ஏதேனும், மீட்க வேண்டும்.
ஆனால் நீங்கள் கணகண வென்ற சப்தம் உடன் கைமுறையாக ஒடுக்குவதற்கான என்றால், பிறகு நீங்கள் போய் அந்த-கிராம் கொடி சேர்க்க வேண்டும்.
>> இந்த கட்டத்தில், இப்போது நாம் GDB வரியில், என்று
இது நிரலை இயக்க அழகான எளிது.
நாம் ஒன்று ரன் தட்டச்சு செய்யலாம், அல்லது நாம் தான் r தட்டச்சு செய்யலாம்.
மிகவும் GDB கட்டளைகளை சுருக்கமாக இருக்க முடியும்.
பொதுவாக அழகான நல்ல இது ஒன்று அல்லது இரண்டு கடிதங்கள், என்று.
நீங்கள் r தட்டச்சு மற்றும் என்ன, Enter விசையை என்றால், Saad?
[Saad] நான் SIGSEGV, அடுக்கு தவறு, பின்னர் இந்த gobbledygook கிடைத்தது.
>> சரி.
நாம் இப்போது திரையில் பார்க்கிறோம் போன்ற, மற்றும் Saad சொன்னது போல்,
நாம் நடத்தும் அல்லது r தட்டச்சு மற்றும் Enter விசையை போது, நாம் இன்னும் அதே நொடி தவறு தான்.
எனவே GDB பயன்படுத்தி எமது பிரச்சினை இல்லை.
ஆனால் அது சில gobbledygook கொடுக்கிறது, அது மாறிவிடும் இந்த gobbledygook
இது நடக்கிறது, அங்கு உண்மையில் நமக்கு சொல்கிறது.
இந்த சிறிது அலச, இந்த முதல் பிட் எல்லாம் தவறு நடக்கிறது இதில் செயல்பாடு ஆகும்.
அங்கு இந்த __ strcmp_sse4_2, அது இந்த கோப்பில் நடக்கிறது என்று நமக்கு சொல்கிறது
sysdeps/i386 என்று, இந்த, மீண்டும், ஒரு குப்பை கூளங்கள் வகையான - ஆனால் வரி 254.
என்று பாகுபடுத்த வகையான கடினமாக உள்ளது. நீங்கள், இந்த மாதிரி பார்க்க வழக்கமாக போது
அது கணினி நூலகங்கள் ஒரு வகை பெயர்ச்சிகள் Seg என்று பொருள்.
அதனால் ஏதாவது strcmp செய்ய. உங்களுக்கு முன் strcmp பார்த்திருக்கிறேன்.
மிகவும் வேடிக்கையான, ஆனால் இந்த strcmp strcmp ஒரு பிரச்சனை இருக்கிறது என்று உடைந்து அல்லது என்று என்றால் என்ன?
நீங்கள், அலெக்சாண்டர் என்ன நினைக்கிறீர்கள்?
[அலெக்சாண்டர்] என்று இது - 254 வரி? மற்றும் - இல்லை பைனரி, ஆனால் அதை அவர்கள் கூரையில் இல்லை,
பின்னர் ஒவ்வொரு செயல்பாடு வேறு மொழி இல்லை. - அந்த விழாவில் 254, அல்லது?
>> இது வரி 254 தான். இந்த. கள் கோப்பில் போல், ஒருவேளை அது சட்டமன்ற குறியீடு எனவே.
>> ஆனால், நான், நாம் ஒரு நொடி தவறு வந்திருக்கிறேன் ஏனென்றால் இன்னும் இன்றியமையாத ஒன்று, என்று நினைக்கிறேன்
அது strcmp விழா வரும் போல் தெரிகிறது,
இந்த வெளிப்படுத்தாது, பின்னர், அந்த strcmp உடைந்துள்ளது?
இது வட்டம், கூடாது. நீங்கள் ஒரு அடுக்கு தவறு இருக்கிறது, ஏனென்றால்
கணினி செயல்பாடுகளை ஒரு, பொதுவாக என்று நீங்கள் சரியாக என்று இல்லை என்று அர்த்தம்.
என்ன உண்மையில் நடக்கிறது கண்டுபிடிக்க செய்ய அதிவேக விஷயம்
நீங்கள் ஒரு நொடி தவறு பார்க்கும் போதெல்லாம் நீங்கள் இப்படி வேடிக்கையாக ஒன்று, பார்க்கும் போது,
நீங்கள், மேல் தான் முக்கிய பயன்படுத்தி என்று ஒரு திட்டம் உள்ளது குறிப்பாக
ஒரு backtrace பயன்படுத்த வேண்டும்.
நான் முழு backtrace வார்த்தைக்கு பதிலாக, BT எழுதி backtrace சுருக்கியது.
ஆனால் சார்லோட், நீங்கள் BT தட்டச்சு மற்றும் வெற்றி உள்ளிடவும் போது என்ன நடக்கும்?
[சார்லோட்] இது எனக்கு இரண்டு கோடுகள், வரி 0 மற்றும் வரி 1 காட்டுகிறது.
>> சரி. எனவே வரி 0 மற்றும் வரி 1.
இந்த உங்கள் நிரல் முறிந்தது போது நாடகம் தற்போது என்று உண்மையான ஸ்டேக் சட்டங்கள் உள்ளன.
மிக உயர்ந்த சட்டம், சட்ட 0 இருந்து தொடங்கி, மற்றும் சட்ட 1 இது, கீழே மிக போகிறது.
நமது மிக சிறந்த சட்ட strcmp சட்டம் உள்ளது.
நீங்கள், இந்த நாங்கள் குறிப்புகள் கொண்ட வினாடி வினா செய்கிறார்கள் என்று சிக்கல் போன்ற யோசிக்க முடியும்
அங்கு நாங்கள், முக்கிய ஸ்டாக் சட்டகமானது மேல் ஸ்டாக் சட்டகமானது இடமாற்றம்
நாம் இடமாற்று முக்கிய பயன்படுத்தி அந்த மாறிகள் மேல் பயன்படுத்தி அந்த மாறிகள் இருந்தது.
இங்கே நம் விபத்தில் எங்கள் முக்கிய செயல்பாடு அழைப்பு அது நம் strcmp செயல்பாடு, நடந்தது
மற்றும் backtrace எங்களை விஷயங்களை தோல்வி இதில் செயல்பாடுகளை மட்டும் கொடுத்து,
எல்லாம் இருந்து அழைத்து அங்கு ஆனால் இது நாம் சொல்வது.
நான் ஒரு சிறிய மேற்பட்ட உருட்டும், நீங்கள்
நாம் ஆமாம், நாம் இந்த strcmp-sse4.s கோப்பின் வரி 254 இருந்தன என்று பார்க்க முடியும்.
ஆனால் அழைப்பு buggy1.c, வரி 6 செய்யப்பட்டது.
நாம் போய் பார்த்துவிட்டு மற்றும் என்ன நடக்கிறது என்று பார்க்க போக முடியும் - நாம் என்ன செய்ய முடியும் என்று
buggy1.c, வரி 6 மணிக்கு.
மீண்டும், இதை செய்ய இரண்டு வழிகள் உள்ளன. ஒரு GDB வெளியே வெளியேற வேண்டும்
அல்லது உங்கள் குறியீடு மற்றொரு சாளரத்தில் மற்றும் குறுக்கு குறிப்பு ஒன்றில் திறக்க வேண்டும்.
இப்போது நீங்கள் அலுவலக மணி நேரத்தில் என்றால் காரணம் என்று, மற்றும் கூட, அழகான எளிது அல்ல
நீங்கள் ஒரு நொடி தவறு கிடைத்தது எல்லாம் உடைத்து அங்கு உங்கள் TF, ஆச்சரியமாக இருக்கிறது
நீங்கள் "ஓ, வரி 6, சொல்ல முடியாது. நான், என்ன நடக்கிறது என்று தெரியவில்லை
ஆனால் வரி 6 பற்றி ஏதோ என் திட்டத்தை முறியடிக்க ஏற்படுத்துகிறது. "
அதை செய்ய வேறு வழி நீங்கள் GDB பட்டியல் என்று இந்த கட்டளையை பயன்படுத்த முடியும்.
நீங்கள் எல் அதை சுருக்கியது முடியும்.
நாங்கள் எல் வெற்றி என்றால், நாம் இங்கே என்ன கிடைக்கும்?
நாம் வித்தியாசமான விஷயங்களை ஒரு மொத்தமாக கிடைக்கும்.
இந்த உண்மையான சட்டசபை குறியீடு உள்ளது
அந்த strcmp_sse4_2 உள்ளது.
இந்த, பங்கி என்ன தெரிகிறது
நாம் இந்த வருகிறோம் காரணம், இப்போது தான்
GDB சட்ட 0 எங்களுக்கு உள்ளது.
>> அதனால் எப்போது நாம் பார்க்க மாறிகள், நாம் மூல குறியீடு பார் எந்த நேரம்,
நாம் ஸ்டேக் சட்ட சார்ந்திருக்கிறது நாம் தற்போது இருக்கிறோம் என்று மூல குறியீடு பார்க்க
எனவே அர்த்தமுள்ள எதையும் பெறுவதற்காக, நாம் வேண்டும்
மேலும் அர்த்தமுள்ளதாக ஒரு ஸ்டாக் சட்டகமானது செல்ல.
இந்த வழக்கில், முக்கிய ஸ்டாக் சட்டகமானது, இன்னும் கொஞ்சம் உணர்வு என்று
என்று உண்மையில் நாம் எழுதிய குறியீடு ஏனெனில்.
இல்லை strcmp குறியீடு.
நாம் இரண்டு ஏனெனில் நீங்கள், இந்த வழக்கில், பிரேம்கள் இடையிலான நகர்த்த முடியாது,
நாம், 0 மற்றும் 1 வேண்டும்
நீங்கள் மேலும் கீழும் கட்டளையை என்று.
நான் ஒரு சட்டகம், மேலே நகர்த்த வேண்டும்
இப்போது நான் முக்கிய ஸ்டாக் சட்டகமானது இருக்கிறேன்.
நான், நான் அங்கு செல்ல கீழே நகர்த்த முடியாது
மீண்டும் சென்று, மீண்டும் கீழே போய், மீண்டும் போக.
நீங்கள் எப்போதாவது GDB உங்கள் திட்டத்தை செய்தால், நீங்கள் ஒரு விபத்தில், நீ, backtrace கிடைக்கும்
மற்றும் நீங்கள் என்ன நடக்கிறது என்று தெரியவில்லை என்று சில கோப்பில் என்று பார்க்க.
நீங்கள் பட்டியல் முயற்சி, குறியீடு, உங்களுக்கு தெரிந்தவர்கள் இல்லை
உங்கள் சட்டங்களை பார்த்து கொள்கிறேன், நீங்கள் எங்கே கண்டுபிடித்தார்கள்.
நீங்கள் தவறான ஸ்டேக் சட்டத்தில் ஒருவேளை நீங்கள்.
அல்லது குறைந்த பட்சம் நீங்கள் உண்மையில் debug என்று அல்ல, ஒரு ஸ்டாக் சட்டகமானது இருக்கிறோம்.
இப்போது நாம் சரியான ஸ்டாக் சட்டகமானது இருக்கிறோம் என்று, நாம், முக்கிய இருக்கிறோம்
இப்போது நாம் வரி என்ன கண்டுபிடிக்க பட்டியலில் கட்டளையை பயன்படுத்தலாம்.
நீங்கள் அதை பார்க்க முடியும்; அது சரி இங்கே நமக்கு அது அச்சிடப்பட்ட.
ஆனால் நாம் அனைவரும் ஒரே பட்டியலிட அடிக்க முடியும், மற்றும் பட்டியல் எங்களுக்கு இந்த நல்ல நகல் கொடுக்கிறது
இங்கே நடக்கிறது என்று உண்மையான மூல குறியீடு.
>> குறிப்பாக, நாங்கள் வரி 6 பார்க்க முடியும்.
நாம் இங்கே என்ன நடக்கிறது பார்க்கலாம்.
நாம் ஒரு சரம் ஒப்பீடு செய்து போல் இது இருக்கிறது
சரம் "CS50 பாறைகள்" மற்றும் argv இடையே [1].
இதை பற்றி ஏதாவது நொறுங்கியதில்.
மிஸ்ஸி அதனால், நீங்கள் இங்கே என்ன நடக்கிறது என்று எந்த எண்ணங்கள் இருக்கிறது?
[மிஸ்ஸி] இது நொறுங்கியதில் ஏன் என்று எனக்கு தெரியவில்லை. இது நொறுங்கியதில் ஏன் >> உனக்கு தெரியாது?
ஜிம்மி, எந்த எண்ணங்கள்?
[ஜிம்மி] நான் முற்றிலும் உறுதியாக இல்லை, ஆனால் நாம் சரம் பயன்படுத்தப்படும் கடந்த கால ஒப்பிட்டு,
அல்லது strcmp, நாம் கீழ் மூன்று வெவ்வேறு சந்தர்ப்பங்களில் போல் இருந்தது.
நாம் ஒரு == இல்லை, நான் முதல் வரிசையில், நினைக்கவில்லை.
மாறாக அது, மூன்று பிரிக்கப்பட்டு, மற்றும் ஒரு == 0 இருந்தது
ஒரு <0, நான் நினைக்கிறேன், மற்றும் ஒரு> 0.
என்று, அதனால் ஏதாவது? >> சரி. எனவே இந்த பிரச்சினை உள்ளது
நாம் சரியாக ஒப்பிட்டு செய்கிறாய்?
ஸ்டெல்லா? எந்த எண்ணங்கள்?
[ஸ்டெல்லா] நிச்சயமாக இல்லை. >> நிச்சயமாக இல்லை. டேனியல்? எண்ணங்கள்? சரி.
அதை நாம் நிரல் ஓடி போது என்ன இங்கே நடக்கிறது என்று மாறிவிடும்
நீங்கள் முதன் முறையாக இந்த திட்டம், டேனியல், ஓடி போது நாம், நொடி தவறு தான்
நீங்கள் எந்த கட்டளை வரி அளவுருக்களை கொடுத்தாய்?
[டேனியல்] இல்லை >> இல்லை அந்த வழக்கில், argv மதிப்பு என்ன? [1]?
>> இல்லை மதிப்பு உள்ளது. >> வலது.
சரி, எந்த சரியான சரம் மதிப்பு உள்ளது.
ஆனால் சில மதிப்பு உள்ளது. அங்கு சேமித்து விடும் என்று மதிப்பு என்ன?
>> ஒரு குப்பை மதிப்பு? இந்த வழக்கில், அல்லது ஒரு குப்பை மதிப்பு அல்லது >>,
argv வரிசை இறுதியில் எப்போதும் பூஜ்ய முடிவு.
அதனால் என்ன உண்மையில் சேமிக்கப்படும் நடந்தது பூஜ்ய உள்ளது.
வேறு வழி, அது மூலம் நினைத்து விட, இந்த தீர்ப்பதற்கு
இது அச்சிடுகிறது முயற்சி ஆகும்.
நான், GDB பயன்படுத்தி பெரும் என்று கூறி அங்கு இந்த
நீங்கள் விரும்பும் அனைத்து மாறிகள் அவுட் அச்சிட முடியாது, ஏனெனில், அனைத்து மதிப்புகள்
இந்த எளிய-சிறந்த ப கட்டளையை பயன்படுத்தி.
நான் ப தட்டச்சு மற்றும் அதனால் நான், ஒரு மாறி அல்லது ஒரு மாறி பெயரை மதிப்பு தட்டச்சு
, argc சொல்ல, நான் argc 1 என்று பார்க்க.
நான் argv அவுட் அச்சிட வேண்டும் என்றால் [0], நான் அப்படி செய்ய முடியாது.
நாம் கண்டது போல, argv [0] எப்போதும் உங்கள் திட்டத்தின் பெயர்,
எப்போதும் இயக்க பெயர்.
இங்கே நீங்கள் முழு பாதை பெயர் இருக்கிறது பார்க்க.
நான் வெளியே அச்சிட முடியாது argv [1] மற்றும் என்ன நடக்கிறது என்று பார்க்கலாம்.
>> இங்கே நாம் மாய மதிப்பு இந்த வகையான கிடைத்தது.
நாம் இந்த 0x0 கிடைத்தது.
நாம் அறுபதின்ம எண்கள் பற்றி பேசிய போது கால தொடக்கத்தில் நினைவிருக்கிறதா?
அல்லது எண்ம 50 பிரதிநிதித்துவம் எப்படி pset 0 இறுதியில் அந்த சிறிய கேள்வி?
நாம் சிஎஸ் உள்ள எண்ம எண்களை எழுத வழி, தான் நம்மை குழப்பி இல்லை
தசம எண்கள், நாம் எப்போதும் 0x அவர்களை முன்னொட்டு ஆகும்.
இந்த 0x முன்னொட்டு எப்போதும் நான், ஒரு அறுபதின்ம எண் பின்வரும் எண் புரிந்து பொருள்
ஒரு சரம் என, ஒரு தசம எண், ஒரு பைனரி எண்.
எண் 5-0 அறுபதின்ம சரியான எண்ணிக்கை என்பதால்.
அது தசம, 50 ல் ஒரு எண்.
இந்த நாங்கள் குழப்பநீக்கம் எப்படி இருக்கும்.
அதனால் 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 இயங்கும் என்று திட்டம்,
அது இந்த தரத்தை அவுட் அச்சிடுகிறது; இது சோகமான முகத்துடன் "நீங்கள், ஒரு டி கிடைக்கும்", என்கிறார்.
ஆனால் நாங்கள் தவறு Seg இல்லை. அந்த செயல்பாடு பொதுவாக வெளியேறிவிட்டது கூறினார்.
அதனால் நல்ல தெரிகிறது.
எந்த நொடி தவறு, நாம், அது கடந்த செய்யப்பட்ட
உண்மையில் நாம் பெறுவது என்று நொடி தவறு பிழை போல அது தோன்றுகிறது.
துரதிருஷ்டவசமாக, அதை நாம் ஒரு டி வருகிறோம் என்று சொல்கிறது
>> நாம் திரும்பி சென்று குறியீடு பார்த்து அங்கு என்ன நடக்கிறது என்று பார்க்கலாம்
என்ன கண்டுபிடிக்க - அதை நாம் ஒரு டி என்று சொல்வதை ஏன்
இந்த printf நீங்கள் ஒரு டி கிடைத்தது என்று பார்க்கலாம், இங்கே
நாம் பட்டியல் தட்டச்சு நீங்கள் தட்டச்சு பட்டியலை வைத்து போல், அது, உங்கள் திட்டம் மூலம் கீழே தேடி கொண்டிருக்கிறான்
அது உங்கள் திட்டத்தின் முதல் சில வரிகளை காண்பிக்கிறேன்.
அது அடுத்த சில வரிகளில், அடுத்த துண்டின் அடுத்த துண்டின் காண்பிக்கிறேன்.
அது கீழே செல்ல முயற்சி வைக்கிறேன்.
இப்போது நாம் "எண் 16 எல்லைக்கு வெளியே வரிசையாக." கிடைக்கும்
இது மட்டும் 15 வரிசைகள் ஏனெனில்.
நீங்கள் இந்த புள்ளியை பெற உங்கள் "நான் என்ன செய்ய வேண்டும்?", என்று இருந்தால் நீங்கள் உதவி கட்டளையை பயன்படுத்தலாம்.
உதவி மற்றும் அது ஒரு கட்டளை பெயரை பயன்படுத்த.
நீங்கள் GDB எங்களுக்கு பொருட்களை அனைத்து இந்த வகையான கொடுக்கிறது பார்க்க.
அது "இல்லை வாதத்தை கொண்டு, முந்தைய பட்டியல் பிறகு அல்லது பத்து வரிகள் பட்டியலிடுகிறது, என்கிறார்.
பட்டியல் - முன் பத்து வரிகளில் பட்டியலிடுகிறது - "
எனவே பட்டியலில் கழித்து பயன்படுத்தி முயற்சி செய்வோம்.
மற்றும் அந்த 10 வரிகளுக்கு முந்தைய பட்டியலிடுகிறது; நீங்கள் பட்டியல் சற்று சுற்றி விளையாட முடியும்.
நீங்கள் பட்டியல், பட்டியல் செய்ய முடியும் - நீங்கள் கூட, பட்டியலில் 8 போன்ற, பட்டியலிட பல கொடுக்க முடியும்
அது வரி 8 சுற்றி 10 வரிகளை பட்டியலிட வேண்டும்.
நீங்கள் வேறு ஒரு எளிய கிடைத்துவிட்டது மற்றும் நீ இங்கே என்ன நடக்கிறது பார்க்கலாம்.
நீங்கள் CS50 பாறைகள் தட்டச்சு செய்தால், அது "நீங்கள் ஒரு ஏ கிடைக்கும்" அவுட் அச்சிடுகிறது
இல்லையெனில் "நீ ஒரு டி கிடைக்கும்" அவுட் அச்சிடுகிறது
Bum நா r நகரம். எல்லாம் சரி. ஆமாம்?
>> [டேனியல்] நான் மேற்கோள் இல்லாமல் CS50 பாறைகள் செய்து முயன்ற போது,
அது "நீங்கள் ஒரு டி கிடைக்கும்" என்கிறார்
நான் வேலை பெற மேற்கோள் தேவை; அது ஏன்?
>> சரி. அது மாறிவிடும் போது - இந்த மற்றொரு வேடிக்கை சிறு சிறு துணுக்கு ஆகும் -
நாம் அது இயக்க நீங்கள், நிரலை நாம் CS50 பாறைகள் தட்டச்சு போது,
போல், டேனியல் அவர் கூறினார், நீங்கள் Enter விசையை
அது இன்னும் ஒரு டி கிடைக்கும் நிதி
மற்றும் கேள்வி, ஏன் இந்த உள்ளது?
அது நம் முனையம் மற்றும் GDB இருவரும் இந்த இரண்டு தனித்தனி விவாதங்கள் இட என்று கூறினார்.
என குறிப்பிட்டதாக என்று ஒரு இடம், இருக்கும் போது, ஏனெனில்
முதல் வாதம் முடிவுக்கு வந்தது; அடுத்த வாதம் தொடங்க உள்ளது.
இரண்டு அந்த இணைக்க வழி, அல்லது மன்னிக்கவும், ஒரு விவாதம்,
மேற்கோள் பயன்படுத்த வேண்டும்.
நாம் மேற்கோள் அதை வைத்து மீண்டும் இயக்க வேண்டும், அதனால் இப்போது, நாம் ஒரு ஏ கிடைக்கும்
அதனால் தான் (உந்து வண்டியை) மீண்டும் நல்ல நிலைக்கு கொண்டு வா, இல்லை மேற்கோள், CS50 மற்றும் பாறைகள் இரண்டு தனி வாதங்கள் என அலச வேண்டும்.
மேற்கோள்கள், அது முற்றிலும் ஒரு வாதம் என அலச வேண்டும்.
>> நாம் ஒரு இடைவேளைநேரத்தை இந்த பார்க்கலாம்.
இதுவரை நாம் இயங்குவதாக, அது இயங்கும் செய்யப்பட்ட
அல்லது அது தவறு அல்லது வெற்றி பிழை Seg வரை
அல்லது அது வெளியேறிவிட்டது மற்றும் அனைத்து நன்றாக உள்ளது வரை.
சில நேரங்களில் இந்த அவசியம் மிகவும் பயனுள்ளதாக அல்ல
நீங்கள் உங்கள் நிரல் பிழை உள்ளது, ஆனால் அது ஒரு அடுக்கு தவறு காரணமாக இல்லை.
இது உங்கள் நிறுத்த திட்டம் அல்லது அப்படி எதுவும் காரணமாக இல்லை.
உங்கள் திட்டத்தை ஒரு குறிப்பிட்ட புள்ளியில் இடைநிறுத்தப்பட்டு GDB பெற வழி
அமைக்கப்படாத உள்ளது.
நீங்கள் ஒரு செயல்பாடு பெயர் ஒரு இடைவேளைநேரத்தை மூலம் இதை செய்ய முடியும்
அல்லது நீங்கள் குறியீடு ஒரு குறிப்பிட்ட வரியில் அமைக்கப்படாத முடியும்.
நினைவில் எளிதாக, - நான், செயல்பாடு பெயர்கள் முறிவுப்புள்ளிகளை அமைக்க விரும்புகிறீர்களா
நீங்கள் உண்மையில் சென்று சிறிது உங்கள் மூல குறியீடு மாற்ற வேண்டும்,
பின்னர் உங்கள் இடைவேளைநேரத்தை உண்மையில் உங்கள் குறியீடு உள்ள அதே இடத்தில் இருக்கும்.
அதேசமயம் நீங்கள் வரிசை எண்களை பயன்படுத்தி, மற்றும் வரிசை எண்களை மாற்ற வேண்டும்
நீங்கள் சில குறியீடு சேர்க்க அல்லது நீக்க ஏனெனில், பிறகு உங்கள் முறிவுப்புள்ளிகளை அனைத்து முற்றிலும் வரை ஸ்க்ரீவ்டு.
நான் மிகவும் பொதுவான விஷயங்கள் ஒரு முக்கிய செயல்பாடு ஒரு அமைக்கப்படாத.
பெரும்பாலும் நான் GDB வரை துவக்க வேண்டும், நான் Enter விசையை, ப முக்கிய தட்டச்சு செய்யலாம், மற்றும் அந்த அமைக்கப்படாத வேண்டும்
நான் சொல்வது எந்த முக்கிய செயல்பாடு, "விரைவில் நீங்கள் இயங்கும் தொடங்கும் என திட்டம் இடைநிறுத்தம்"
அந்த வகையில், நான் CS50 பாறைகள், என்று, என் நிரலை போது இரண்டு வாதங்கள்
மேலும், Enter விசையை, இது முக்கிய செயல்பாடு கிடைத்தால் அது முதல் வரியில் நிறுத்தப்படும்
இது strcmp செயல்பாட்டை மதிப்பீடு வலது முன்.
>> நான் இடைநிறுத்தப்பட்டுள்ளது நான் இருந்து, இப்போது நான் சுற்றி mucking மற்றும் என்ன நடக்கிறது தொடங்களாம்
என் நிரலை கடந்து என்று பல்வேறு மாறிகளை அனைத்து.
இங்கே நான் argc அவுட் அச்சிட்டு என்ன நடக்கிறது பார்க்கலாம்.
அது 3 வெவ்வேறு மதிப்புகள் கிடைத்தது தான் காரணம் argc, 3 என்று பார்க்க.
இது திட்டத்தின் பெயர் இருக்கிறது, இது முதல் வாதம் மற்றும் இரண்டாவது வாதம் இருக்கிறது.
நாம் argv பார்த்து அந்த அவுட் அச்சிட முடியாது [0], argv [1], மற்றும் argv [2].
இந்த strcmp அழைப்பு தோத்துடுவாங்க ஏன் இப்போது நீங்கள், பார்க்க முடியும்
நீங்கள் இரண்டு தனி வாதங்களை எடுத்து CS50 மற்றும் பாறைகள் பிரிந்து என்று பார்க்க காரணம்.
நீங்கள் ஒரு இடைவேளைநேரத்தை ஹிட் செய்த இந்த கட்டத்தில், உங்கள் திட்டம் மூலம் நடவடிக்கை தொடரலாம்
வரி மூலம் வரி, மீண்டும் உங்கள் திட்டத்தை தொடங்கி எதிர்க்கும்.
நீங்கள் மீண்டும் உங்கள் திட்டத்தை தொடங்க விரும்பவில்லை என்றால், இங்கே இருந்து தொடர்ந்து
நீங்கள் தொடர்க கட்டளையை பயன்படுத்தலாம் மற்றும் தொடர்ந்து முடிவுக்கு நிரலை இயக்க முடியும்.
அதை இங்கே போல.
நான் திட்டம், CS50 பாறைகள் மீண்டும் எனினும், இது, மீண்டும் என் இடைவேளைநேரத்தை பலி
இந்த நேரத்தில், நான், நிரல் மற்ற அனைத்து வழிகளிலும் தான் செல்ல விரும்பவில்லை
நான் கூட, n சுருக்கியது இது அடுத்த கட்டளையை பயன்படுத்த முடியாது.
இந்த வரி மூலம் நிரல் வரி மூலம் செல்லும்.
விஷயங்களை இயக்க எனவே நீங்கள் விஷயங்களை மேம்படுத்தப்பட்டது செய்து போல்,,, மாறிகளின் மாற்றம் பார்க்கலாம்.
இது மிகவும் நன்றாக இருக்கிறது.
மற்ற குளிர் விஷயம், மாறாக மீண்டும் மேல் மற்றும் மேல் அதே கட்டளையை மீண்டும் விட
நீங்கள் Enter விசையை என்றால் - இங்கே நான் எதையும் தட்டச்சு இல்லை பார்க்க -
நான் Enter விசையை என்றால், அது, முந்தைய கட்டளையை மீண்டும்
அல்லது முந்தைய GDB கட்டளையை நான் உள்ளே போட வேண்டும் என்று
நான் உள்ளிடவும் தாக்கியதால் வைத்திருக்க முடியும் மற்றும் வரி மூலம் என் குறியீடு வரி மூலம் நுழைவதை வைக்கிறேன்.
நான் உங்களுக்கு மற்ற தரமற்ற திட்டங்கள் அதே பாருங்கள் செல்ல ஊக்குவிக்க வேண்டும்.
நாம் அனைவரும் இன்று பகுதியில் மூலம் பெற நேரமில்லை.
மூல குறியீடு உள்ளது, எனவே நீங்கள் என்ன நடக்கிறது பார்க்க என்ன செய்ய முடியும்
நீங்கள் உண்மையில் சிக்கிவிடும் என்றால் திரைக்கு பின்னால்,
ஆனால் மிக குறைந்த பட்சம், தான், GDB வரை துவக்க பயிற்சி
அதை நீங்கள் முறித்து வரை, இயங்குவதாக
,, backtrace பெற்று விபத்தில் இருந்து செயல்பட என்ன கண்டறிவதன்
என்ன வரி, சில மாறி மதிப்புகள் அச்சிடுகிறது, இருந்தது
என்று உண்மையில் நீங்கள் முன்னோக்கி செல்லும் உதவும் என்பதால் தான் நீங்கள், அது ஒரு உணர்வு கிடைக்கும்.
இந்த கட்டத்தில், நாங்கள் உங்களுக்கு q விட்டு பயன்படுத்தி அல்லது அவை, GDB வெளியே விட்டு செல்கிறோம்.
உங்கள் நிரல் இன்னும் இயங்கும் நடுவில் உள்ளது, அது வெளியேறிவிட்டது என்றால்,
அது எப்போதும் நீங்கள் கேட்க வேண்டும், "நீங்கள் உண்மையில் வெளியேற வேண்டுமா?"
நீ ஆம் அடிக்க முடியும்.
>> இப்போது நாம் பூனை திட்டம் இது நாம் அடுத்த பிரச்சனை, பார்க்க போகிறோம்.
நீங்கள் திருப்பி மற்றும் குழாய்கள் மீது குறுகிய பார்க்கலாம் என்றால், நீங்கள் டாமி இந்த திட்டத்தை பயன்படுத்துகிறது என்று பார்ப்போம்
அந்த அடிப்படையில் திரையில் ஒரு கோப்பை அனைத்து வெளியீடு அச்சிடுகிறது.
நான் பூனை ரன் இருந்தால், இந்த பயன்பாட்டிற்கான உண்மையில் ஒரு உள்ளமைக்கப்பட்ட நிரல்,
நீங்கள் மேக்ஸின் இருந்தால் நீங்கள் முனையத்தில் திறந்து என்றால், நீங்கள், உங்கள் மேக் இந்த செய்ய முடியும்.
நாம் - பூனை, தான், cp.c சொல்கிறேன், மற்றும் Enter விசையை.
இந்த என்ன, நாம் சற்று மேலே நாம் வரி ஓடி அங்கு பார்க்க
அல்லது நாம் cat கட்டளையை ஓடி, அது உண்மையில் நம் திரையில் cp.c உள்ளடக்கங்களை அச்சு.
நாங்கள் மீண்டும் இயக்க முடியும் மற்றும் நீங்கள் ஒன்றாக பல கோப்புகளை வைக்க முடியும்.
எனவே, நீங்கள் பூனை cp.c செய்ய முடியும், அதன் பிறகு நாம் cat.c கோப்பு ஒன்று சேர் முடியும்
இது, நாம் பற்றி எழுத போகிறீர்கள் நிரல்
அது நம் திரையில் மீண்டும் மீண்டும் இரண்டு கோப்புகளை அச்சிட வேண்டும்.
நாம் சற்று மேலே என்றால், நாம் பார்க்க வேண்டும் என்று நாம் இந்த பூனை cp.c, cat.c, ஓடி போது
முதலில் cp கோப்பு அச்சு, மற்றும் அது கீழே, அதை சரி கீழே இங்கே cat.c கோப்பு அச்சு.
நாம் நமது அடி ஈரமான பெற இந்த பயன்படுத்த போகிறோம்.
முனையத்தில் எளிய அச்சிடும் சுற்றி விளையாட, அந்த வேலை எப்படி பார்க்க.
நீங்கள் gedit cat.c மூலம் திறந்து இருந்தால், Enter விசையை
நீங்கள் எழுத போகிறீர்கள் என்று திட்டம் பார்க்க முடியும்.
நாம் இந்த நல்ல கொதிகலத்தகடு சேர்த்தேன், நாம் என்று தட்டச்சு நேரம் செலவிட இல்லை அதனால்.
நாங்கள் உள்ளே கடந்து வாதங்கள் எண்ணை சரிபார்த்து
நாம் ஒரு நல்ல பயன்பாடு செய்தியை அச்சிட.
>> இந்த, மீண்டும், போன்ற நாம் பற்றி பேசி கொண்டிருக்கிறேன் என்று, தான் வகை
இது கிட்டத்தட்ட தசை நினைவகம் போல.
ஒரு பொருள் அதே மாதிரி செய்து வைக்க நினைவில்
எப்போதும் உங்களுக்கு பயனுள்ளதாக செய்தி ஒருவித அச்சிடுகிறது
அதனால் மக்கள் உங்கள் நிரலை இயக்க எப்படி தெரியும்.
பூனை, அது மிகவும் எளிது; நாங்கள் வேறு வாதங்கள் எல்லாம் செல்ல போகிறோம்
என்று எங்கள் திட்டம் நிறைவேற்றப்பட்டன, மற்றும் நாம் அச்சிட போகிறோம்
ஒரு நேரத்தில் திரையில் ஒரு தங்கள் உள்ளடக்கங்களை.
திரையில் கோப்புகளை அவுட் அச்சிட பொருட்டு, நாம் மிகவும் போன்ற ஏதாவது செய்ய போகிறோம்
நாம் வினாடி வினா இறுதியில் என்ன செய்தார்.
நிரல் அமர்த்த அந்த வினாடி வினா, இறுதியில், நாம், ஒரு கோப்பை திறக்க வேண்டும்
பின்னர் நாம் அதனை அச்சிட வேண்டும்.
இந்த வழக்கில், நாம் ஒரு கோப்பை திறக்க போகிறோம், நாம் பதிலாக அதை படிக்க போகிறோம்.
நாம் அதற்கு பதிலாக ஒரு கோப்பு பற்றிய, அச்சிட போகிறோம், நாம் திரையில் அச்சிட போகிறோம்.
எனவே நீங்கள் அனைத்து printf முன்பு செய்த திரையில் அச்சிடுதல்.
எனவே அதுவும் ஒரு பைத்தியம் இல்லை.
ஆனால் ஒரு கோப்பை படித்து விசித்திரமான வகையாக.
நாம் ஒரு நேரத்தில் ஒரு சிறிது மூலம் செல்லலாம்.
நீங்கள் உங்கள் வினாடி வினா, பிரச்சனை 33, என்று கடந்த பிரச்சினை மீண்டும் சென்றால்
நாம் இங்கே செய்ய போகிறோம் என்று முதல் வரி, கோப்பு திறந்து, நாங்கள் அங்கு என்ன செய்தது போல் இருக்கும்.
ஸ்டெல்லா எனவே, நாம் ஒரு கோப்பு திறக்கும் போது, அந்த வரி இருக்கிறதா?
[ஸ்டெல்லா] மூலதன FILE *, கோப்பு - >> சரி. >> - Fopen சமமாக இருக்கும். >> ஆமாம்.
இந்த வழக்கில் இது? அதை கருத்தில் தான்.
>> இது கருத்து என்ன? argv [நான்] மற்றும் r?
சரியாக >>. வலது. அதனால் ஸ்டெல்லா முற்றிலும் சரி.
இந்த வரி போல் உள்ளது.
நாம், ஒரு கோப்பு ஸ்ட்ரீம் மாறுபாடு ஒரு கோப்பு * அதை சேமிக்க வேண்டும், எனவே நீங்கள் அனைத்து தொப்பிகள்,
கோப்பு, *, மற்றும் இந்த மாறி பெயரை கோப்பு இருக்கும்.
நாம் எது அது அழைப்பு முடியும். நாம் விரும்பினால் என்ன, அதை first_file, அல்லது file_i அழைக்க முடியும்.
பின்னர் கோப்பு பெயர் இந்த நிரல் வரியில் உள்ள நிறைவேற்றப்பட்டது.
அது argv சேமிக்கப்பட்டுள்ள [நான்,] மற்றும் நாம் படிக்க முறையில் இந்த கோப்பு திறக்க போகிறோம்.
நாம் கோப்பை திறந்து நீங்கள் இப்போது, என்ன நாம் எப்போதும் செய்ய நினைவில் வேண்டும் என்று விஷயம்
நாம் ஒரு கோப்பு திறந்து எப்போது? அது மூட.
மிஸ்ஸி எனவே, எப்படி நாம் ஒரு கோப்பு மூட?
[மிஸ்ஸி] fclose (கோப்பு) >> fclose (கோப்பு). சரியாக.
பெரிய. சரி. நாங்கள் இங்கே கருத்து செய்ய இந்த பார்த்து, இருந்தால்
அது "திறந்த argv [i] மற்றும் stdout அதன் உள்ளடக்கங்களை அச்சிட.", என்கிறார்
>> நிலையான அவுட் வித்தியாசமான பெயர். Stdout என்று மட்டும் நம் வழி
நாம் முனைய அது அச்சிட வேண்டும்; நாங்கள் நிலையான வெளியீடு ஸ்ட்ரீம் அதை அச்சிட வேண்டும்.
நாம் உண்மையில் சரியான இங்கே இந்த விடுபட முடியும்.
நான் அதை நகலெடுத்து என்று நாம் என்ன தான் இருந்து ஒட்டுவதற்கு போகிறேன்.
இந்த கட்டத்தில், இப்போது நாம் கொஞ்சம் மூலம் கோப்பு பிட் படிக்க வேண்டும்.
நாம் படித்து கோப்புகளை வழிகளில் இரண்டு விவாதிக்கப்பட்டது.
இது தான் இதுவரை உங்கள் அபிமான இருக்கும்?
எந்த வழிகளில் நீங்கள் பார்த்த அல்லது கோப்புகள் படிக்க, நினைவிருக்கிறதா?
[டேனியல்] fread? >> Fread? எனவே fread ஒன்றாகும். ஜிம்மி, நீங்கள் எந்த மற்றவர்களுக்கு தெரியுமா?
[ஜிம்மி] இல்லை >> சரி. இல்லை. சார்லோட்? அலெக்சாண்டர்? எந்த மற்றவர்களுக்கு? சரி.
அதனால் மற்ற ஒன்றை நாம் நிறைய பயன்படுத்த வேண்டும் என்று, ஒரு fgetc இருக்கும்.
மேலும் fscanf இல்லை; நீங்கள் இங்கே ஒரு முறை பார்க்க?
அவர்கள் அனைத்து f தொடங்கும். ஒரு கோப்பு எதுவும்.
Fread, fgetc, fscanf உள்ளது. இந்த வாசிப்பு செயல்பாடுகள் அனைத்தும்.
நாம் fwrite வேண்டும் எழுதியதற்காக, நாம் பதிலாக fgetc என்ற fputc வேண்டும்.
நாங்கள் fprintf நாம் வினாடி வினா பார்த்த மாதிரி.
இந்த ஒரு கோப்பை படித்து அடங்கும் என்று ஒரு பிரச்சனை, முதல்
இந்த மூன்று செயல்பாடுகளை பயன்படுத்த போகிறோம்.
நாம் இங்கே இந்த செயல்பாடுகளை குறைத்து பயன்படுத்த போவதில்லை.
இந்த செயல்பாடுகள் அனைத்தும் தரமான நான் / ஓ நூலகம் காணப்படுகின்றன.
இந்த திட்டத்தின் முதல் பாருங்கள், அப்படி என்றால்
நாம் ஏற்கனவே நிலையான I / O நூலகத்தின் தலைப்பு கோப்பு சேர்த்தேன் என்று பார்க்கலாம்.
நாம் கண்டுபிடிக்க வேண்டும் என்றால், அது நாம் பயன்படுத்த வேண்டும்,
நாம் எப்போதும் man பக்கங்களை திறந்து கொள்ளலாம்.
எனவே மனிதன் stdio தட்டச்சு
மற்றும் சி உள்ள stdio உள்ளீடு மற்றும் வெளியீடு செயல்பாடுகளை பற்றி படிக்க
நாம் ஏற்கனவே ஓ, ஆனால் பார்க்க முடியாது. இது fgetc சொல்லி தான், அது fputc குறிப்பிட்டார்.
எனவே நீங்கள் fgetc, சற்று கீழே தோண்டி மற்றும் பார், சொல்ல முடியாது
அதன் மனிதன் பக்கம் பாருங்கள்.
நீங்கள் அதை மற்ற செயல்பாடுகளை மொத்தமாக சேர்ந்து செல்லும் காண முடியும்:
fgetc, fgets, getc, getchar, பெறுகிறார், ungetc, மற்றும் பாத்திரங்கள் மற்றும் சரங்களின் அதன் உள்ளீடு.
இந்த, நாங்கள் நிலையான உள்ளீட்டு கோப்புகளை இருந்து பாத்திரங்கள் மற்றும் சரங்களை படிக்க எப்படி இருக்கும்
இது பயனர் இருந்து அடிப்படையில்.
இந்த உண்மையான சி அதை செய்ய எப்படி இருக்கும்
இந்த GetString மற்றும் GetChar செயல்பாடுகளை பயன்படுத்தி
நாம் CS50 நூலகத்திலிருந்து பயன்படுத்தப்படும் என்று.
நாம் வழிகளில் ஒரு ஜோடி இந்த பிரச்சனை செய்ய போகிறோம்
அதனால் நீங்கள் அதை செய்து இரண்டு வெவ்வேறு வழிகளில் காண முடியும்.
Fread டேனியல் குறிப்பிட்டுள்ளார் அந்த செயல்பாடு மற்றும் fgetc இருவரும் அதை செய்ய நல்ல வழிகள் உள்ளன.
அது மட்டும் இல்லை, ஏனெனில் நீங்கள் பார்க்க நான்,,, fgetc ஒரு சிறிய எளிதாக நினைக்கிறேன்
ஒரு வாதம், நாம் தன்மையை வாசிக்க முயற்சிக்கும் கோப்பு *,
அதன் பதிலாக மதிப்பு ஒரு முழு எண்ணாக இருக்கிறது.
இந்த உரிமை, கொஞ்சம் குழப்பமான இருக்கிறது?
>> நாம் ஒரு பாத்திரம் வருகிறோம் ஏனெனில், ஏன் இந்த பதிலுக்கு ஒரு எரிப்பதை இல்லை?
நீங்கள் இந்த ஒரு எரிப்பதை திரும்ப மாட்டார் ஏன் எந்த யோசனை?
[மிஸ்ஸி பதில்கள், புரிந்து] >> சரி. எனவே மிஸ்ஸி முற்றிலும் சரி.
அதை ASCII இருந்தால், இந்த முழு உண்மையான எரிப்பதை ஒப்பிடப்படுகிறது.
ஒரு ASCII எழுத்துகளின் இருக்கும், மற்றும் அது சரிதான் என்று.
என்று சரியாக நடக்கிறது என்ன.
அது இன்னும் பிட்கள் உள்ளன வெறுமனே ஏனெனில் நாம் ஒரு முழு எண்ணாக பயன்படுத்துகிறீர்கள்.
எங்கள் எரிப்பதை மட்டும் 8 பிட்கள் உள்ளன, நமது 32 பிட் கணினிகளில் 1 பைட் என்று அது ஒரு எரிப்பதை விட பெரியது.
மற்றும் ஒரு முழு எண்ணாக எல்லா இடத்தையும் 4 பைட்டுகள் 'மதிப்பு உள்ளது.
அது வழி fgetc வேலை என்று திருப்பி,
நாம் இந்த மனிதன் பக்கம் கொஞ்சம் எங்கள் தெரிந்து உள்ள உருட்டலாம் என்றால்,
அனைத்து வழி உருட்டலாம். அதை அவர்கள் EOF என்று இந்த சிறப்பு மதிப்பு பயன்படுத்தும் அவுட் சுழல்கிறது.
இது fgetc செயல்பாட்டை திரும்ப மதிப்பு ஒரு சிறப்பு நிலையான தான்
நீங்கள் கோப்பு இறுதியில் வெற்றி அல்லது நீங்கள் ஒரு பிழை கிடைத்தாலும். போதெல்லாம்
அது, ஒழுங்காக EOF இந்த ஒப்பீடுகள் செய்ய என்று மாறும்
நீங்கள் ஒரு முழு எண்ணாக நீங்கள் அந்த தகவலை அந்த கூடுதல் தொகை வேண்டும்
ஒரு எரிப்பதை மாறி பயன்படுத்தி எதிர்க்கும்.
Fgetc திறமையுடன், ஒரு கோப்பை ஒரு கதாபாத்திரம் வருகிறது கூட
நீங்கள் செய்ய வகை எண்ணாக தான் என்று ஏதோ திரும்பிய என்று நினைவில் வேண்டும்.
அது பயன்படுத்த மிகவும் எளிதானது, என்றார்.
அது எங்களுக்கு ஒரு கேரக்டர் கொடுக்க நடக்கிறது; நாம் செய்ய வேண்டிய அனைத்து கோப்பு கேட்டு கொண்டே இருக்கும்,
"என்னை அடுத்த தன்மையை கொடுக்க, எனக்கு அடுத்த தன்மையை கொடுக்க, எனக்கு அடுத்த பாத்திரம் கொடுங்கள்"
நாம் கோப்பை இறுதியில் கிடைக்கும் வரை.
என்று, நம் கோப்பு ஒரு நேரத்தில் ஒரு எழுத்தை இழுக்கும் வேண்டும்
பின்னர் நாம் அது எது பிடிக்குமோ அதை செய்ய முடியும்.
நாம் அது சேமிக்க முடியும், நாம், ஒரு சரம் இதை சேர்க்க முடியும் நாம் அதை அச்சிட முடியாது.
என்று எந்த செய்வது.
>> வெளியே வந்து பெரிதாக்க மற்றும் நம் cat.c திட்டம் செல்கிறேன்,
நாம் fgetc பயன்படுத்த போகிறீர்கள் என்றால்,
எப்படி நாம் குறியீடு இந்த அடுத்த வரி அணுகலாம்?
நாம் பயன்படுத்த போகிறோம் - fread சற்று வித்தியாசமாக ஏதாவது செய்ய வேண்டும்.
இந்த நேரத்தில், நாம் ஒரு நேரத்தில் ஒரு பாத்திரத்தை பெற fgetc பயன்படுத்த போகிறோம்.
ஒரு முழு கோப்பை செயல்படுத்த, நாம் என்ன செய்ய வேண்டும்?
அங்கு ஒரு கோப்பில் எத்தனை எழுத்துக்கள் உள்ளன?
நிறைய உள்ளன. அதனால் ஒருவேளை நீங்கள் ஒரு பெற வேண்டும்
பின்னர் மற்றொரு கிடைக்கும் மற்றொரு கிடைக்கும் மற்றொரு கிடைக்கும்.
நாம் இங்கே பயன்படுத்த வேண்டும் வழிமுறை என்ன நினைக்கிறீர்கள்?
என்ன வகை -? லூப் [அலெக்சாண்டர்] ஒரு? சரியாக >>.
கண்ணி சில வகை.
வட்டத்திற்கு ஒரு இந்த வழக்கில், உண்மையில் நன்றாக இருக்கிறது.
நீங்கள் முழு கோப்பு மீது ஒரு வட்டத்திற்கு வேண்டும் போல் நீங்கள் சொன்னீர்கள் போல், அது, கேட்பதற்கே
ஒரு நேரத்தில் ஒரு கேரக்டர் கிடைத்தால்.
இப்படி இருக்கும் என்று என்ன எந்த பரிந்துரைகளை?
[அலெக்ஸாண்டர், புரிந்து]
>> சரி, இப்போது நீங்கள் செய்ய முயற்சிக்கும் என்ன ஆங்கில சொல்? [அலெக்ஸாண்டர், புரிந்து]
நாங்கள் தான் முழு கோப்பு மீது வளைய முயற்சிப்பது போல இந்த வழக்கில், கேட்பதற்கே.
[அலெக்சாண்டர்] எனவே நான் <எண்ணாக அளவு? >> அளவு -?
நான், கோப்பு அளவு தெரியுமா? அளவு - we'll அதை இந்த மாதிரி எழுத.
முறையாக கோப்பை அளவு இருப்பது, நான் +.
எனவே, நீங்கள் இந்த fgetc பயன்படுத்தி, மற்றும் என்ன வழி இந்த புதிய என்று மாறிவிடும்
ஒரு கோப்பு அளவு பெற எளிதான வழி இருக்கிறது என்று
நீங்கள் முன் பார்த்த அந்த கட்டுவதற்கு இந்த "sizeof" வகை.
நாம் அந்த fgetc செயல்பாட்டை பயன்படுத்த போது, நாம் சில வகையான அறிமுகம்
லூப் இந்த புதிய, பங்கி தொடரியல், அங்கு பதிலாக ஒரு அடிப்படை எதிர்ப்பு பயன்படுத்தி
எழுத்து மூலம் தன்மையை செல்ல, நாம், ஒரு நேரத்தில் ஒரு பாத்திரத்தை இழுக்க போகிறோம்
ஒரு நேரத்தில் தன்மை, மற்றும் நாம் அறிய வழி நாம் முடிவில் இருக்கிறோம்
நாம் எழுத்துக்கள் ஒரு குறிப்பிட்ட எண்ணிக்கை கணக்கில் வில்லை போது,
ஆனால் நாம் வெளியே இழுக்க தன்மையை கோப்பு தன்மை சிறப்பு இறுதியில் போது.
நான் இந்த சாப்டர் அழைப்பு, மற்றும் நாம் அதை துவக்க போகிறோம் - நாம் செய்யலாம்
கோப்பு வெளியே முதல் எழுத்தை பெற எங்கள் முதல் அழைப்பு.
இங்கே இந்த பகுதி மிகவும், இந்த கோப்பு ஒரு பாத்திரத்தை வெளியே போகிறது
மற்றும் மாறி சாப்டர் அதை சேமிக்க.
நாம் கோப்பை இறுதியில் கிடைக்கும் வரை நாம் இதை வைத்து போகிறோம்,
இது நாம் அந்த சிறப்பு EOF தன்மையை சமமாக இல்லை கதாபாத்திரத்தை சோதனை செய்ய.
அதற்கு பதிலாக சாப்டர் செய்து பின்னர் + + இது தான், மதிப்பு அதிகப்படுத்த வேண்டும்
நாம் கோப்பு ஒரு ஒரு அவுட், ஒரு, என்று ஒரு மூலதனம், படிக்க நீங்கள்
சாப்டர் + எங்களை கேட்ச் கொடுக்க வேண்டும், மற்றும் நாம் கேட்ச் பின்னர் ஈ தொடங்கும்.
என்று நாம் என்ன தெளிவாக இல்லை. நாம் இங்கே என்ன தேவை
இந்த கடைசி பிட் நாம் கோப்பு இருந்து அடுத்த தன்மையை பெற வேண்டும்.
>> நாம் எப்படி கோப்பை இருந்து அடுத்த பாத்திரம் வந்துவிடும்?
எப்படி நாம் கோப்பு முதல் பாத்திரம் கிடைக்கும்?
[மாணவர்] fgetfile? >> Fgetc, அல்லது, மன்னிக்கவும், நீங்கள் சரியாக இருந்தது.
நான் அங்கு அது தவறுதலாக எழுதப்பட்டது. சரி அப்படி.
இங்கே பதிலாக சாப்டர் செய்து + +
நாங்கள் தான் மீண்டும் fgetc (கோப்பு) அழைக்க போகிறாய்
நமது ஒரே சாப்டர் மாறி விளைவாக சேமிக்க.
[மாணவர் கேள்வி, புரிந்து]
இந்த FILE * தோழர்களே சிறப்பு எங்கே >> இது.
அவர்கள் வேலை வழி அவர்கள் - நீங்கள் முதல் திறக்கும் போது - முதலில் அந்த fopen அழைப்பை போது,
FILE * திறம்பட கோப்பு தொடக்கத்தில் ஒரு சுட்டிக்காட்டி பணியாற்றுகிறார்.
பின்னர் நீங்கள் fgetc என்று ஒவ்வொரு முறையும், அதை கோப்பு மூலம் ஒரு பாத்திரம் நகரும்.
நீங்கள் இந்த அழைப்பு மிக போதெல்லாம், நீங்கள் ஒரு பாத்திரம் மூலம் கோப்பு சுட்டிக்காட்டி உயர்த்துவதன்.
நீங்கள் மீண்டும் fgetc போது, அதை மற்றொரு பாத்திரம் நகரும்
மற்றொரு பாத்திரம் மற்றும் மற்றொரு பாத்திரம் மற்றும் மற்றொரு பாத்திரம்.
[மாணவர் கேள்வி, புரிந்து] >> மேலும் that's - ஆமாம்.
அதை பேட்டை கீழ் இந்த மந்திரம் வகையான தான்.
நீங்கள் மூலம் உயர்த்துவதன் வைத்து.
இந்த கட்டத்தில், நீங்கள் உண்மையில் ஒரு பாத்திரம் வேலை முடிகிறது.
நாம் எப்படி இப்போது, திரையில் இந்த அச்சிட வேண்டும்?
நாம் முன்னர் பயன்படுத்திய அதே printf தான் பயன்படுத்த முடியும்.
நாம் அனைத்து செமஸ்டர் பயன்படுத்தி என்று.
நாம், printf அழைக்க முடியும்
மற்றும் நாம் இப்படியே தன்மையை கடத்தலாம்.
அதை செய்ய வேறு வழி, மாறாக printf பயன்படுத்தி இந்த வடிவம் சரம் செய்ய வைத்து விட
நாம் மற்ற செயல்பாடுகளை ஒரு பயன்படுத்தலாம்.
நாம் திரையில் ஒரு கதாபாத்திரம் அச்சிடுகிறது இது fputc, பயன்படுத்தலாம்
நாம் fputc பார் என்றால் தவிர - என்னை கொஞ்சம் அவுட் பெரிதாக்கவும் நாம்.
நாம், என்ன அழகாக அதை நாம் fgetc பயன்படுத்தி படிக்கும் தன்மையை எடுத்து பாருங்கள்
ஆனால் நாம் அதை அச்சிட ஒரு ஸ்ட்ரீம் கொடுக்க வேண்டும்.
நாங்கள் நிலையான அவுட் நேரடியாக வைக்கிறேன் இது putchar செயல்பாடு, பயன்படுத்த முடியும்.
நாம் அச்சிடுவதற்கு பயன்படுத்தலாம் என்று பல்வேறு விருப்பங்களை ஒரு மொத்தமாக உள்ளன.
அவர்கள் தர நான் / ஓ நூலகத்தில் உள்ளோம்.
நீங்கள் அச்சிட வேண்டும் போதெல்லாம் - அதனால் printf, முன்னிருப்பாக, ஸ்ட்ரீம் அவுட் சிறப்பு தரத்தை அச்சிட
அந்த stdout ஆகும்.
எனவே இந்த மாய மதிப்பு, இங்கே உள்ள stdout வகையான அதை பார்க்கவும் முடியாது.
Oops. வெளியே அரைப்புள்ளி வைத்து.
>> இந்த இங்கே புதிய, பங்கி தகவல் நிறைய உள்ளது.
இந்த நிறைய இந்த குறியீடு தான் என்ற அர்த்தத்தில், மிகவும் மரபு ஆகும்
இது, வாசிக்க எளிதாக படிக்க சுத்தமான தான் நான் இந்த வழியில் எழுதப்பட்ட என்று.
அதை செய்ய பல வழிகள், நீங்கள் பயன்படுத்தலாம் பல மாறுபட்ட செயல்பாடுகள் உள்ளன
ஆனால் நாங்கள் வெறும் மேல் இதே வடிவத்தையும் முனைகின்றன.
நீங்கள் மீண்டும் மீண்டும் வரும் இந்த குறியீடு பார்த்தால் ஆச்சரியப்படவேண்டாம் இல்லை.
எல்லாம் சரி. இந்த கட்டத்தில், நாம் நாள் உடைக்க வேண்டும்.
வந்ததற்கு நன்றி. நீங்கள் ஆன்லைன் என்றால் பார்த்து நன்றி. நாம் அடுத்த வாரம் சந்திப்போம்.
[CS50.TV]