ShowStr - gcc пропускает явную ошибку - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Интересует функция ShowStr. Почему gcc пропускает явную ошибку? Показывает только предупреждения.
#include <stdio.h>
 
void ShowStr(const char *str)
{
    strcpy(str, "Another");
}
 
int main()
{
    char str[] = "This is string";
    ShowStr(str);
    printf("%s\n", str);
    
    return 0;
}
$ gcc prog.c -o prog prog.c: В функции «ShowStr»: prog.c:5:5: предупреждение: несовместимая неявная декларация внутренней функции «strcpy» strcpy(str, "Another"); ^ prog.c:5:12: предупреждение: passing argument 1 of «strcpy» discards «const» qualifier from pointer target type strcpy(str, "Another"); ^ prog.c:5:12: замечание: expected «char *» but argument is of type «const char *»
Даже эта компилируется.
#include <stdio.h>
 
int main()
{
    const char str[] = "This is string";
    
    strcpy(str, "New string");
    
    printf("%s\n", str);
    
    return 0;
}
Предупреждений больше, но компилируется.

Решение задачи: «ShowStr - gcc пропускает явную ошибку»

textual
Листинг программы
#include <stdio.h>
void ShowStr(const char *str)
{
* * strcpy(str, "Another");
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл для использования функций ввода-вывода.
  2. Создаем функцию ShowStr, которая принимает аргумент типа const char *.
  3. Используем оператор * для разыменования указателя на строку и передачи его в функцию strcpy.
  4. Внутри функции strcpy, передаем адрес переменной str и строку Another для копирования.
  5. Возвращаем 0 из функции strcpy, чтобы указать успешное завершение операции копирования.
  6. Выводим строку Another с помощью функции printf, передавая ей аргументы Another.
  7. Возвращаем 0 из функции ShowStr, чтобы указать успешное завершение операции вывода строки.
  8. Код не содержит инструкций для обработки ошибок или исключений.
  9. Код не содержит комментариев или документации.
  10. Код не содержит переменных, объявленных внутри функции.
  11. Код не содержит использования функций, кроме strcpy и printf.
  12. Код не содержит циклов или условных операторов.
  13. Код не содержит операций ввода-вывода, кроме операций с указателями и строками.
  14. Код не содержит операций арифметики или логики.
  15. Код не содержит операций присваивания или изменения значений переменных.
  16. Код не содержит операций сравнения или поиска.
  17. Код не содержит операций работы со строками, кроме strcpy.
  18. Код не содержит операций работы с файлами или директориями.
  19. Код не содержит операций работы с памятью или выделение памяти.
  20. Код не содержит операций работы с библиотеками или заголовочными файлами, кроме .

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


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

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

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