פורסם 2005 במאי 1820 שנים שלום לכולם.שאלה פשוטה לי אליכם:האם הפונקציה strcpy יכולה להעתיק רק מחרוזת מסוג char[] ל char[], אך איננה מסוגלת להעתיק char* ל char*?כאשר אני מנסה להעתיק char* ל char* הנני מקבל שגיאת הרצה, לדוגמה עבור הקוד הבא:#include <string.h>#include <iostream.h>void main(){ char *string1="hw"; char *string2="zone"; strcpy(string2, string1); cout<<string2;}תודה מראש, קובי.
פורסם 2005 במאי 1820 שנים מערבב C++ עם C ? לא קריטיבכל מקרה, כדאי להבין מה משמעות ה * שאתה מוסיף... זה מצביע.. צריך להקצות מקום לפני שמשתמשים, אי אפשר להכניס "hw" לתוך מצביע סתם ככה..אני ממליץ לקרוא על פוינטרים והקצאות מקום.
פורסם 2005 במאי 1820 שנים מחבר שתי בקשות לי אליכם:- האם יש דרך להחזיר ערך של char[] בפונקציה, ולא char*?- אשמח אם מישהו יואיל בטובו לתקן את קטע הקוד.בתדוה מראש, קובי.
פורסם 2005 במאי 1820 שנים בגדול char * ו char [] אותו דבר(כשאתה שולח את זה לפונ).תנסה להשתמש ב- strdup במקום strcpy.string1= strdup(string2);
פורסם 2005 במאי 1820 שנים תקנתי את מה שכתבת int main( void ){ char string1[]="hw"; char string2[]="zone"; strcpy(string2, string1); cout<<string2; return 0;}
פורסם 2005 במאי 1820 שנים אוקי, כמה דברים:1. char* ו-char[] הם אותו דבר מבחינת המהדר (כל פונקציה שמקבלת אחד יכולה גם לקבל את האחר). ההבדל היחיד הוא ש-char* נועד למערכים דינמיים ו-char[] נועד למערכים סטטיים.2. אי אפשר לעשות char* string1="hw", כי המחרוזת "hw" היא קבועה (const). מה שאתה מנסה לעשות הוא שמצביע שאינו const יצביע ל-const, וזה אסור. מה שאתה יכול לעשות זה const char* string1="hw" (ואז string1 יהיה קבוע, כלומר לא תוכל להעתיק לתוכו באמצעות strcpy).3. כשאתה עושה strcpy, מצביע היעד שלך (המקום אליו אתה מעתיק, לא זוכר איזה משני הארגומנטים זה) חייב להצביע לזיכרון שהקצית מראש (allocate) סטטית (כלומר char str[10]) או דינמית (כלומר char* str=new char[10]). הוא לא יכול להצביע לקבוע (כמו המחרוזת "hw" שרשמת), כי אי אפשר לכתוב לתוכו.
פורסם 2005 במאי 1820 שנים מחבר תודה על העזרה.לפניכם עוד שאלה:יצרתי Default Constructor עבור, לדוגמה, Student, בצורה הנ"ל:Student(char name[MAX_LETTERS]=NULL, char username[MAX_LETTERS]=NULL, char password[MAX_LETTERS]=NULL, int year=0, long course_numbers[5]=NULL, int grades[10]=NULL)יצרתי כך עבור שאר המחלקות שלי, ולהערכתי הדבר גרם לשגיאת ריצה. האם למישהו יש הסבר מדוע?בנוסף, האם יש דרך לאתחל את המערכים, לדוגמה course_numbers, בערך קבוע, כמו 1 (כלומר, כל איברי המערך יושוו ל 1), כבר בהצהרה או בשורת האתחול?חשבתי על course_number[5]={1, 1, 1, 1, 1}, לא הלך.תודה מראש על ההתייחסות ועל העזרה, קובי.
פורסם 2005 במאי 1820 שנים אולי באמת כדאי שתחזור ותלמד מערכים ופיינטריםוכן אפשר לאתחל את כל המערך ברגע ההגדרה לדוגמא כדי לאתחל את כל אבריו של מערך בגודל 5:char a[5]={0} אפשר גם לאתחל כל אחד בניפרד:int a[5]={1,2,3,4,5}אפשר גם לא לתת גודל למערך, במקרה כזה הקומפיילר יצור מערך בגודל מספר המאתחלים:int a[]={1,2,3,4,5}
פורסם 2005 במאי 1820 שנים אוף אתכם.לא מעבירים מערכים על ה- stack!ועוד יותר גרוע - אם אתה עושה השמה ממערך שהעברת על ה- stack למצביע אחר, המצביע לא יהיה חוקי כשהפונקציה תחזור, כי ה- stack התפנה בינתיים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.