Ошибка и предупреждения в своей функции - 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. Список действий в коде:

  1. В функции substr объявляются две переменные: iter типа const char* и i типа int.
  2. Переменная iter инициализируется значением переменной str.
  3. В цикле while выполняется проверка: пока значение следующего символа в строке не равно '\0'.
  4. Если текущий символ в строке равен символу c, выполняется следующее действие:
    • Переменная i инициализируется значением, равным ~(str - iter) + 1 (здесь используется оператор ~ для получения противоположного значения).
    • Значение символа, следующего за найденным символом c, присваивается переменной *((str) + i).
    • Значение символа c заменяется на символ '\0' (т.е. '\0' присваивается переменной *iter).
    • Функция возвращает значение переменной str.
  5. Если текущий символ в строке не равен символу c, выполняется следующее действие:
    • Переменная iter увеличивается на 1.
  6. Если цикл while завершается (т.е. когда достигается конец строки), функция возвращает NULL. В основной части кода:
  7. Объявляется буферная переменная buff типа char с размером 32 символа.
  8. В функцию strcpy передаются два аргумента: buff и image.jpg. Функция копирует строку image.jpg в буферную переменную buff.
  9. В функцию printf передается два аргумента: %s и значение переменной buff. Функция выводит на экран содержимое буферной переменной buff. Таким образом, результатом выполнения данного кода будет вывод на экран строки image.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы