>> דובר: בואו לכתוב תכנית ש מבקש מהמשתמש שתי מחרוזות ו
לאחר מכן מדווח אם המיתרים הללו זהה או לא זהה.
אני כבר התחלתי אותנו כאן על ידי קורא printf פעמיים וקוראים
GetString פעמיים, אחסון התמורה ערכים בים ולא בהתאמה.
>> עכשיו, האינסטינקטים שלי להשוות בין שני אלה מחרוזות תהיה להשתמש מוכר
מפעיל שוויון -
אם זה שווה שווה לא.
ואז אני הולך קדימה והדפסה מתוך "אתה הקלדת את אותו הדבר!
אחר, אם זה לא נכון, אני פשוט הולך הקלד printf ("אתה הקלדת
דברים שונים!
>> פשוט למדי -
אני פשוט השוואה של נגד לא, ואם הם שווים,
הדפסה החוצה באותה מידה.
בואו לקמפל ולהריץ תכנית זו.
הפוך להשוות 0. / להשוות 0, לומר משהו, שלום,
לומר משהו, הלו.
>> למרבה הצער, התכנית חושבת לי הוקלד דברים שונים, למרות שאני
ברור שהוקלד "שלום" אותה דרך בשתי הפעמים.
עכשיו, למה זה יכול להיות?
>> ובכן, מתברר שכל זה זמן, מיתרים היו קצת יותר
מורכב יותר מאשר רצף של תווים מתחת למכסת המנוע.
במציאות, מחרוזת היא מצביע או כתובת, במיוחד את הכתובת
מהתו הראשון שב רצף של תווים.
>> ולכן כאשר אנו משווים s נגד t בסימן השוויון שווה, אנחנו
שואל בעצם, היא כתובת זו שווה שווה לכתובת זו?
וזה לא הולך להיות המקרה אם המשתמש הקליד בשני שונים
מחרוזות ואנחנו כבר נקראו GetString פעמיים כדי לקבל אותם, כי הזיכרון
GetString המשתמש לאחסון הראשון מחרוזת יכולה להיות כאן בזכרון RAM, אבל
זיכרון שGetString משתמש כדי לאחסן המחרוזת השנייה הולכת
להיות כאן בזכרון RAM.
וכמובן, אם כן, שני גושים אלה של יש לי זיכרון כתובות שונות עבור
התווים הראשונים שלהם.
>> אז הוא של שווה שווה לא?
ובכן, לא.
אם ים ולא מצביעים על שונה גושים של זיכרון, כפי שהם יהיו על ידי
קוראים GetString פעמיים, הם לא, למעשה, הולך להיות אותו הדבר.
אז נראה שזה המקרה של להשוות בין שתי מחרוזות באינטואיטיבי
אופן שבו אנו מצפים, תווים אופי, אנחנו צריכים טכניקה נוספת
לגמרי.