Ошибка и предупреждения в своей функции - C (СИ)
Формулировка задачи:
Нужно вывести имена файлов без расширения.
Написал функцию:
Вызываю здесь:
Что не так?
int substr(char *str, char c){ int n; char *cut; n = strrchr(str,c); // [BCC32 Warning] yahoo.c(111): W8069 Nonportable pointer conversion strncpy(cut,str,n); return cut; // [BCC32 Warning] yahoo.c(111): W8069 Nonportable pointer conversion }
strcpy(groupmenu[i],substr(ffblk.ff_name,'.')); // [BCC32 Error] yahoo.c(42): E2342 Type mismatch in parameter '__src' (wanted 'const signed char *', got 'int')
Решение задачи: «Ошибка и предупреждения в своей функции»
textual
Листинг программы
const char* substr(char* str, char c) { const char* iter = str; while( *iter != '\0' ) { if( *iter == c ) { int i = ~(str - iter) + 1; *((str) + i) = '\0'; return str; } *iter++; } return NULL; } char buff[32]; strcpy(buff, "image.jpg"); printf("%s\n", substr(buff, '.') );
Объяснение кода листинга программы
В данном коде представлена функция substr, которая принимает два аргумента: строку str и символ c. Функция ищет в строке первое вхождение символа c и заменяет его на символ '\0'. Если символ c не найден, функция возвращает NULL. Список действий в коде:
- В функции substr объявляются две переменные: iter типа const char* и i типа int.
- Переменная iter инициализируется значением переменной str.
- В цикле while выполняется проверка: пока значение следующего символа в строке не равно '\0'.
- Если текущий символ в строке равен символу c, выполняется следующее действие:
- Переменная i инициализируется значением, равным ~(str - iter) + 1 (здесь используется оператор ~ для получения противоположного значения).
- Значение символа, следующего за найденным символом c, присваивается переменной *((str) + i).
- Значение символа c заменяется на символ '\0' (т.е. '\0' присваивается переменной *iter).
- Функция возвращает значение переменной str.
- Если текущий символ в строке не равен символу c, выполняется следующее действие:
- Переменная iter увеличивается на 1.
- Если цикл while завершается (т.е. когда достигается конец строки), функция возвращает NULL. В основной части кода:
- Объявляется буферная переменная buff типа char с размером 32 символа.
- В функцию strcpy передаются два аргумента: buff и
image.jpg
. Функция копирует строкуimage.jpg
в буферную переменную buff. - В функцию printf передается два аргумента:
%s
и значение переменной buff. Функция выводит на экран содержимое буферной переменной buff. Таким образом, результатом выполнения данного кода будет вывод на экран строкиimage
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д