Таңбалар массиві мен С жолының айырмашылығы неде?


жауап 1:

Кейіпкерлер массиві - 8 биттік байт ретінде талданатын жадының іргелес аралық кеңістігі. Өлшем жасау кезінде белгіленеді және әр байтта бір таңбаның сақталуына кепілдік беріледі.

Бұл жағдайда таңба 00000000 (0x00 hex) -ден 11111111 (0xFF hex) дейінгі кез-келген 8 биттік екілік сан болып табылады.

char array [100]; / * 100 символдар жиымын [0] массивке [99] * /

Айнымалы ток сақтау үшін char массивін пайдаланады. C жолы 0-ден массивтің ұзындығына минус 1 таңбаға дейін болуы мүмкін.

Жақсы қалыптасу үшін массив тек пайдаланылатын таңбалардағы жарамды символдарды білдіретін байттардың жиынтығын қамтуы мүмкін. Бұл көбінесе ASCII немесе UTF-8. Басқа байттар жол басылып шыққан немесе түсіндірілген кезде жарамсыз болуы мүмкін.

Жолда белгінің (айнымалы) мәні бар, ол массивтің мекенжайын қамтитын таңбаның сілтегіш түрі (char *).

Жолда NULCHAR ('\ 0', 0x00 hex) бар, ол жолдағы соңғы таңбадан кейін жолды аяқтайды.

char s [10]; char * t =? strncpy (t, «012345678 \ 0», 10)

«Жедел жол» бастапқы кодта қос тырнақшаға жазылады және толтырылған таңбалармен таңбалар массивін құруға мәжбүр етеді және жолдар үшін арнайы оқылатын жерде сақталады және оларға сілтегіш қайтарылады. Бұл «компилятор синтаксисі» және мұндай жолдарды қолдануды жеңілдетеді. NULCHAR автоматша алапқа қосылады, оны жасау чтобы оны жақсы құрған.

char * s = «жедел жол»; printf («% s \ n), s);

C кітапханалық жолының барлық стандартты функциялары жолдарды таңбалар түрінде береді және '\ 0' бар деп есептейді.

Жалпыға бірдей қолданылатын «бұзу» дегеніміз - бұл массивке қол жеткізген кезде ол сонымен қатар массивтің бірінші элементіне сілтегіш ретінде қызмет етеді. және керісінше.

char * x = «abcdefgh»; printf («x 4 таңба:% c \ n», x [3]); x 4-ші таңба: d / * таңбалар массивіне жол салыңыз * / char str [100]; strncpy (str, «abcdefghijklmnop \ 0», 18); char * a = str; char * b = str + 7; printf («% s \ n», a); abcdefghijklmnop printf («% s \ n», b); хикклмноп

Бұл икемділікке қарамастан, char жиымы мен C жолы тікелей сәйкес келмейді.

char s [10]; s = «abcdefghi»; / * қате * / // қате: 'char *' 'abcdefghi' түрінің 'char [10]' түріне тағайындалған кезде сәйкес келмейтін типтер жедел жол болып табылады және ол үшін жасалған массивтегі «а» сілтемесімен шешіледі. Тағайындау s жұмыс істемейді, өйткені char массивтерін тағайындау мүмкін емес.

Массивтер шынымен C-тің бірінші түрі емес. Оларды тікелей көшіруге болмайды, оларда массив деңгейіндегі операциялар жоқ, т.с.с. массивтермен жасалынғанның барлығы жеке мазмұн үшін жасалады, біртұтас емес.

char s [10]; char * x = «abcdefghi»; / * '\ 0' соңында * / strncpy (s, x, 10); / * әр таңбаны массивке көшіреді * /

жауап 2:

Таңбалар массиві - C бағдарламалау тіліндегі мәліметтер құрылымы: жадтағы байттардың саны, сіз онда белгілерді сақтай аласыз. Осы ұяшықтардың әрқайсысында кез-келген таңбаны (мысалы, 8-биттік байт, 0-ден 255-ке дейін) сақтауға болады.

С-стиліндегі жол (мен сіздің сұрағыңызда “c-string” деп түсіндіремін) - С тілі нөлдік байтсыз (мән) жоқ таңбалар саны ретінде анықтайтын таңбалардың “жолын” ұсынудың бір тәсілі. 0). Бұл кейіпкерлердің өздерімен ұсынылады, содан кейін нөлдік байт болады, сондықтан жолдың ұзындығын бөлек сақтаудың қажеті жоқ. Мұны 16 биттік қол қойылмаған бүтін санмен көрсетілген Паскаль стиліндегі жолмен салыстырыңыз (Паскаль жолы 65535 немесе одан аз).

Таңбалар массиві - бұл мәліметтер құрылымы, С стиліндегі жол - бұл мәліметтерді ұсыну. Олар әр түрлі жануарлар.

Таңбалар массиві C стиліндегі жолды немесе басқа бір нәрсені қамтуы мүмкін (мысалы, ол бос таңбадан кейінгі пайдалы ақпаратты қамтиды немесе мүлде бос таңбаны қамтымайды). және сіз оны C-стиліндегі жол ретінде интерпретациялай аласыз (егер ол кемінде бір бос сипаттан тұратын болса). С стиліндегі жолды таңбалар массивінде немесе массивтен басқа жерде сақтауға болады (мысалы, жадтың тек оқылатын бөлігі, сондықтан басқа мәндерді «сақтай» алмайды).