Указатель на const массив изменяет его? - C (СИ)
Формулировка задачи:
Привет! Задача была написать функцию, сохраняющую расширение файла из строки file_name в строку extension. Строка file_name задана как const, но получается что данная функция стирает ее содержимое, а строка extension выводит 6 символов, хотя ее размер задан 3 символа? Подскажите, что я сделал неправильно?
#include <stdio.h> #include <string.h> #define N 3 void get_extension(const char *file_name, char *extension); int main () { char file_name[] = "memo.txt123"; char extension[N] = ""; get_extension(file_name, extension); return 0; } void get_extension(const char *file_name, char *extension) { size_t i = strlen(file_name); for(; file_name[i] != '.'; i--) *(extension + (i - 5)) = file_name[i]; printf("\nFile extension is: %s\n", extension); printf("\nFile name is: %s\n", file_name); }
Решение задачи: «Указатель на const массив изменяет его?»
textual
Листинг программы
char const* get_extension(char const* file_name) { char const* p = strrchr(file_name, '.'); return (p ? ++p : NULL); } int main() { char file_name1[] = "memo.txt123"; char file_name2[] = "memo"; char const* extension = get_extension(file_name1); printf("\nFile name is: %s\n", file_name1); printf("\nFile extension is: %s\n", extension); extension = get_extension(file_name2); printf("\nFile name is: %s\n", file_name2); printf("\nFile extension is: %s\n", extension); return 0; }
Объяснение кода листинга программы
- В функции
get_extension
используется функцияstrrchr
, которая ищет последний символ в строке. - Если символ '.' найден, то возвращается указатель на следующий символ после '.'
- Если символ '.' не найден, то возвращается
NULL
- В функции
main
создаются две строки:file_name1
иfile_name2
- Для
file_name1
вызывается функцияget_extension
и сохраняется результат в переменнуюextension
- Выводится имя файла
file_name1
и его расширение, сохраненное вextension
- Для
file_name2
вызывается функцияget_extension
и сохраняется результат в переменнуюextension
- Выводится имя файла
file_name2
и его расширение, сохраненное вextension
- Возвращается 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д