PDA

View Full Version : سوال در مورد strcmp



a.valinezhad
یک شنبه 18 مهر 1395, 22:02 عصر
با سلام خدمت دوستان محترم
بنده در حال نوشتن برنامه ای هستم که دور رشته را مقایسه می کند:

char my[4];

my[0]=getche();
my[1]=getche();
my[2]=getche();
my[3]=getche();

printf("%d",strcmp(my,"ABCD"));


بنده تک تک کاراکتر ها را به ترتیب A B C D وارد می کنم.باید خروجی تابع 0 باشد یعنی دو رشته برابرند، اما حاصل 1 است.
لطفا راهنمایی کنید.

T.R.G.T
دوشنبه 19 مهر 1395, 07:38 صبح
من مشکلی نمیبینم شاید داده ها رو اشتباه وارد میکنید.

negative60
دوشنبه 19 مهر 1395, 11:13 صبح
با سلام خدمت دوستان محترم
بنده در حال نوشتن برنامه ای هستم که دور رشته را مقایسه می کند:

char my[4];

my[0]=getche();
my[1]=getche();
my[2]=getche();
my[3]=getche();

printf("%d",strcmp(my,"ABCD"));


بنده تک تک کاراکتر ها را به ترتیب A B C D وارد می کنم.باید خروجی تابع 0 باشد یعنی دو رشته برابرند، اما حاصل 1 است.
لطفا راهنمایی کنید.


وقتی‌ نوع استاتیک تعریف می‌کنید هیچ تضمینی وجود نداره که که تمام کارکترها نال باشه یعنی شما در واقع دارید ABCD� رو با ABCD مقایسه می‌کنید و به همین دلیل جواب ۱ می‌شه.
همیشه بعد از تعریف رشته استاتیک تمام یا آخرین بایت رو نال کنید که مشکلی‌ پیش نیاد

char my[4];
//my[sizeof(my)] = 0;
//Or
//memset(&my, 0, sizeof(my));

a.valinezhad
دوشنبه 19 مهر 1395, 15:46 عصر
وقتی‌ نوع استاتیک تعریف می‌کنید هیچ تضمینی وجود نداره که که تمام کارکترها نال باشه یعنی شما در واقع دارید ABCD� رو با ABCD مقایسه می‌کنید و به همین دلیل جواب ۱ می‌شه.
همیشه بعد از تعریف رشته استاتیک تمام یا آخرین بایت رو نال کنید که مشکلی‌ پیش نیاد

char my[4];
//my[sizeof(my)] = 0;
//Or
//memset(&my, 0, sizeof(my));
متشکرم.
مشکل حل شد.
اما لطفا در صورت امکان توضیح دهید با توجه به اینکه آرایه 4 عضوی است و خانه آخر آن 3 است، چگونه ممکن است که بتوان خانه 4 آن را صفر کرد؟