0 / 0 / 0
Регистрация: 03.09.2019
Сообщений: 19
1

Функция strcpy

11.11.2019, 22:03. Показов 1873. Ответов 10

Здравствуйте , сегодня читая книгу столкнулся с данной функцией (strcpy), и использовал её без библиотеки string.h , хотя в книге написано что она нужна , но программа работала как надо и без библиотеки , подскажите почему так. Извините если вопрос тупой =)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2019, 22:03
Ответы с готовыми решениями:

Функция strcpy
Почему-то разработчиками была создана функция не типа void а сhar * strcpy(char *dest, char *src)...

Ошибка с strcpy
В данном коде в функции findNearEquals вылетает ошибка доступа к памяти, помогите найти её Вот...

ошибка в strcpy
я переводил программу с другого языка программирования на С-язык. Там была функция substr. substr...

Не работает strcpy()
Нужно вывести строку "Hello, World!" из строки "pt Hello, World!;": #include <stdio.h> #include...

10
Заблокирован
Эксперт C
11.11.2019, 22:46 2
Лучший ответ Сообщение было отмечено Kolyao как решение

Решение

Цитата Сообщение от Kolyao Посмотреть сообщение
но программа работала как надо и без библиотеки
Бывает... В Си нет жесткой необходимости в объявлениях функций. С объявлениям он бы проследил, а те ли аргументы вы ему подсовываете, что возвращаете. Если надо, предпринял бы необходимые преобразования типов. То есть код был бы надежнее. А так, без объявлений, он вам вынужден верить на слово. И если вы уверены, что все делаете правильно, то все получится. Есть правда, такие опции, заставляющие компилятор ворчать (но не более того, чистые варнинги).
А вот в С++ такой фокус не пройдет. Там ВСЕ функции должны быть объявлены. Необъявленная - ошибка! И этому есть разумное объяснение. Полиморфизм.
1
С чаем беда...
Эксперт CЭксперт С++
9267 / 4765 / 1290
Регистрация: 18.10.2014
Сообщений: 10,867
11.11.2019, 23:23 3
Цитата Сообщение от Kolyao Посмотреть сообщение
Здравствуйте , сегодня читая книгу столкнулся с данной функцией (strcpy), и использовал её без библиотеки string.h,
Не существует никакой "библиотеки string.h". Функция strcpy содержится в стандартной библиотеке языка С.

Цитата Сообщение от Kolyao Посмотреть сообщение
но программа работала как надо и без библиотеки , подскажите почему так
Некоторые стандартные заголовочные файлы могут включать другие заголовочные файлы. Вы могли подключить другой стандартный заголовочный файл, а он уже через себя "незаметно" включил в вашу программу <string.h>.

А может ваша программа и не "работала" вовсе, а вам показалось, что она "работает". В языке С требуется обязательно объявлять функции перед их использованием, но вы могли просто проигнорировать диагностическое сообщение компилятора об ошибке в вашем коде.

Никто тут не знает, что там происходило в вашей программе, о которой вы нам тут рассказываете. Когда вы задаете вопросы о программе, надо приводить код этой программы, а не рассказывать какие-то байки о том, что у вас там якобы что-то "работало".
0
122 / 81 / 43
Регистрация: 16.08.2016
Сообщений: 325
12.11.2019, 08:59 4
У меня strcpy() ещё ни разу не работал без подключения string.h
0
3362 / 1918 / 368
Регистрация: 09.09.2017
Сообщений: 7,833
12.11.2019, 09:16 5
А вы подключите windows.h, stdafx.h и еще кучу заголовочников, которые в пятидесятом вложении тики подключат несчастный string.h
0
122 / 81 / 43
Регистрация: 16.08.2016
Сообщений: 325
12.11.2019, 09:25 6
Наверное вы правы, просто я под линукс с gcc
0
Заблокирован
Эксперт C
12.11.2019, 12:03 7
Цитата Сообщение от Vadim Borisov Посмотреть сообщение
У меня strcpy() ещё ни разу не работал без подключения string.h
Все зависит от компилятора. Мои древние сишные компиляторы эту оплошность прощают. А gcc не балует.
Kolyao, советую вам вегда подключать string.h. Хуже не будет. Повторные подключения обойдут "сторожа" (Code Guard). Зато меньше будет головной боли при переходе на другие компиляторы.
Цитата Сообщение от Kolyao Посмотреть сообщение
библиотеки string.h
А тут терминологическая неточность, которая возмутила уважаемого TheCalligrapher. Это не библиотека. Это просто кусок текста, как все хедеры, вставляемая по директиве #include в текст вашего кода. В этом куске объясняется транслятору, что функция strcpy есть и как с ней положено обращаться.
А библиотека - это то, что подключается при сборке (линковке). И есть стандартная библиотека языка С. Вот там-то тело, реализация этой функции есть. Эта библиотека подключается всегда. Помимо строчных функций там еще много чего есть. Но вот математические функции (sin, pow, sqrt, atan...) не всегда. Некоторые системы включают их в стандартную, а некоторые нет.
Как-то я был "приятно" удивлен, когда вся моя программа, прекрасно работавшая дома, на хосте вдруг не нашла этих синусов. Выход был в том, что я подключил эту мат-библиотеку флагом "-lm", руками то есть. Фреймворки обычно имеют список библиотек, которые можно подключить (обычно просто галочки ставишь). А иногда они нужной тебе библиотеки просто не знают, и ее нужно по имени называть.
Если все вышесказанное вам кажется заумным туманом, настоятельно рекомендую основательно разобраться.
1
0 / 0 / 0
Регистрация: 03.09.2019
Сообщений: 19
12.11.2019, 20:30  [ТС] 8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>  
#include<locale.h>
int main(void)
{
    setlocale(LC_ALL,"Rus");
char month[10]="January";
printf("Сейчас месяц %s\n",month);
 
month[0]='M';
month[1]='a';
month[2]='r';
month[3]='c';
month[4]='h';
month[5]='\0';
 
printf("Сейчас месяц %s\n",month);
 
strcpy(month,"April"); // month = "April" недопустимо!
 
printf("Сейчас месяц %s",month);
 
}
вот код.
0
С чаем беда...
Эксперт CЭксперт С++
9267 / 4765 / 1290
Регистрация: 18.10.2014
Сообщений: 10,867
12.11.2019, 22:57 9
Цитата Сообщение от Kolyao Посмотреть сообщение
вот код.
Компилируем компилятором GCC c -pedantic-errors. Получаем

Код
main.c: In function 'main':
main.c:19:1: error: implicit declaration of function 'strcpy' [-Wimplicit-function-declaration]
   19 | strcpy(month,"April"); // month = "April" недопустимо!
      | ^~~~~~
main.c:19:1: warning: incompatible implicit declaration of built-in function 'strcpy'
main.c:3:1: note: include '<string.h>' or provide a declaration of 'strcpy'
    2 | #include<locale.h>
  +++ |+#include <string.h>
    3 |
Я уверен, что ваш компилятор тоже выдавал что-то подобное. А вы просто проигнорировали эти сообщения.

---

Обратите, кстати, внимание, на второй warning:

Даже в "старом" С, где разрешалось вызывать функции без предварительного объявления, компилятор бы дедуцировал объявление strcpy как int strcpy(char *, char *). А в реальности эта функция является char *strcpy(char *, const char *), то есть дедуцированное объявление являлось бы неправильным и поведение все равно было бы не определено.
1
0 / 0 / 0
Регистрация: 03.09.2019
Сообщений: 19
13.11.2019, 00:19  [ТС] 10
да , действительно ,я не обратил внимание на ругательства компилятора).
0
3362 / 1918 / 368
Регистрация: 09.09.2017
Сообщений: 7,833
13.11.2019, 09:54 11
Цитата Сообщение от Kolyao Посмотреть сообщение
да , действительно ,я не обратил внимание на ругательства компилятора).
А зря. Warning еще опаснее Error'а, поскольку не прерывает компиляцию и допускает выполнение ошибочного кода. Старайтесь исправить все ошибки (и error и warning), на которые указывает компилятор.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2019, 09:54

Падает программа с strcpy
Не могу понять, почему вылетает программа. Через malloc память для *p выделять пробовал, все равно...

Релизация функции strcpy
Здравствуйте. Я попытался реализовать функцию strcpy, но она возвращает огромное отрицательное...

Strcpy обход дерева
void write_tree_to_file(node_id* tree_id, FILE* fp) { if (tree_id) { char line; ...

Не компилируется программа. Предположительно - нужно использовать strcpy
Добрый день, имеется программа, но никак не могу откомпилировать, начинается ругаться, ругается на ...

Линейный список и ошибка Warning: passing arg 1 of `strcpy' from incompatible pointer type
Проблема с написанием проги (линейный список). Язык Си. #include &lt;stdio.h&gt; #include &lt;string.h&gt;...

Не срабатывает точка останова на функцию strcpy
Учусь программировать на Си в Linux и по чуть-чуть разбираюсь в отладчике gdb, но возникла одна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.