ShowStr - gcc пропускает явную ошибку - C (СИ)
Формулировка задачи:
Интересует функция ShowStr. Почему gcc пропускает явную ошибку? Показывает только предупреждения.
$ 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>
void ShowStr(const char *str)
{
strcpy(str, "Another");
}
int main()
{
char str[] = "This is string";
ShowStr(str);
printf("%s\n", str);
return 0;
}
Даже эта компилируется.
#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");
}
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций ввода-вывода. - Создаем функцию ShowStr, которая принимает аргумент типа const char *.
- Используем оператор * для разыменования указателя на строку и передачи его в функцию strcpy.
- Внутри функции strcpy, передаем адрес переменной str и строку
Anotherдля копирования. - Возвращаем 0 из функции strcpy, чтобы указать успешное завершение операции копирования.
- Выводим строку
Anotherс помощью функции printf, передавая ей аргументыAnother. - Возвращаем 0 из функции ShowStr, чтобы указать успешное завершение операции вывода строки.
- Код не содержит инструкций для обработки ошибок или исключений.
- Код не содержит комментариев или документации.
- Код не содержит переменных, объявленных внутри функции.
- Код не содержит использования функций, кроме strcpy и printf.
- Код не содержит циклов или условных операторов.
- Код не содержит операций ввода-вывода, кроме операций с указателями и строками.
- Код не содержит операций арифметики или логики.
- Код не содержит операций присваивания или изменения значений переменных.
- Код не содержит операций сравнения или поиска.
- Код не содержит операций работы со строками, кроме strcpy.
- Код не содержит операций работы с файлами или директориями.
- Код не содержит операций работы с памятью или выделение памяти.
- Код не содержит операций работы с библиотеками или заголовочными файлами, кроме
.