Форум программистов, компьютерный форум CyberForum.ru

Странности в поведении strncpy - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.07.2011, 15:23     Странности в поведении strncpy #1
Я написал программу на ноутбуке используя Code::Blocks и minigw как компилятор под 7кой и перенёс исходники на стацонарник где у меня тоже Code::Blocks и minigw и тоже 64х битная 7ка как ОС, разница разве что в процессоре будет (Интел и АМД) и что я вижу при компиляции:
'strncpy' was not declared in this scope|

Да какого же это спрашивается? Это что вообще такое, как это можно понимать, что за надмозг вообще, пойду компилировать у друга программу так оно мне ещё и
'string' was not declared in this scope| напишет или что?

Мой код (могу и полный написать если надо):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "ClientData.h"
#include <iomanip>
using std::setw;
 
#include <string>
using namespace std;
 
....
 
ClientData& ClientData:: setName(string n)
{
 
    strncpy(name,n.data(),15); //где name это: char name[15]
    return *this;
}
...
Этот код был 100% рабочий когда я компилировал его на ноутбуке да и вообще я не понимаю с чего этой ошибке вылезать, если кстати написать:
C++
1
 std::strncpy(name,n.data(),15);
то напишет
'strncpy' is not a member of 'std'|
что тоже довольно таки интересно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2011, 15:23     Странности в поведении strncpy
Посмотрите здесь:

про strncpy () C++
strncpy C++
C++ Задание по копированию строк, strncpy
C++ Ошибка в функции (strncpy)
C++ Ошибка предположительно в strncpy(word, p1, len)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2011, 15:29     Странности в поведении strncpy #2
У тебя пишет что переменная string не объявлена и функция strncpy, подключи string.h Вобще по твоему коду сложно о чём то судить, хотябы дай выжимки из класса ClientData, а и ещё накой вот так делать ClientData& ??? Забей функцию типом войд...
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.07.2011, 15:39  [ТС]     Странности в поведении strncpy #3
Да, вот выгуглил что надо подключи string.h вместо просто string но какая блин разница? Раз оно понимало тип string значит директива #include <string> воспринималась так зачем же я на стационарнике должен менять на #include <string.h>, что за бред не пойму.

Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а и ещё накой вот так делать ClientData& ??? Забей функцию типом войд...
Это как же на кой, а return *this; думаешь там просто так в конце

Добавлено через 1 минуту
Ещё можно подключить cstring и тоже проэкт скомпилируется, но почему на ноутбуке он компилировался с просто #include <string> ? В чём же особенность хитромудрого подключения как угодно, но только не #include <string> ?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.07.2011, 15:41     Странности в поведении strncpy #4
Цитата Сообщение от Gepar Посмотреть сообщение
Да, вот выгуглил что надо подключи string.h вместо просто string но какая блин разница? Раз оно понимало тип string значит директива #include <string> воспринималась так зачем же я на стационарнике должен менять на #include <string.h>, что за бред не пойму.
мало понял из вашего поста,
но string.h (или cstring) - это один заголовочник, а string - это другой.
к тому времени когда STL было включено в стандарт заголовочники .h устарели поэтому место для string "освободилось"
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2011, 15:43     Странности в поведении strncpy #5
По твоему коду ничего нельзя сказать, слишком мало, не вижу что у тебя подключено в ClientData.h переведи в перевочике strncpy' was not declared i - strncpy' не была объявлена...
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 15:44     Странности в поведении strncpy #6
Функции для работы с ASCIIZ строками (char*) объявлены в сишном заголовке <string.h>. В C++ можно подключать его, но лучше специально созданный для этого <cstring> (обратить внимание на первую букву). А <string> содержит объявления класса std::string.
Но раз требуются оба, то оба и подключать:
C++
1
2
#include <string>
#include <cstring>
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.07.2011, 15:48     Странности в поведении strncpy #7
string.h - функции языка C для работы со строками(null-terminated strings)
В стандартной библиотеке С++ все заголовочные файлы пишутся без расширения. Имена заголовков относящиеся к C начинаются с буквы 'c', например cstring(который тебе нужно подключить), cstdio и т.д. От аналогичных string.h и stdio.h они отличаются тем, что все функции в них помещены в пространство имён std(но сделано это весьма оригинальным способом, поэтому можно писать названия функций и без указания пространства имён...). А в заголовке string описан класс std::string, который ты используешь как параметр метода setName.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 15:55     Странности в поведении strncpy #8
Цитата Сообщение от Gepar Посмотреть сообщение
C++
1
std::strncpy(name,n.data(),15);
Вообще, довольно подозрительная конструкция.
Возможно имелось в виду такое:
C++
1
2
std::strncpy(name,n.c_str(),15);
name[14]='\0';
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.07.2011, 16:01     Странности в поведении strncpy #9
\0 в тему да.
а .data() и .c_str() это по-мойму 1 и то же...
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 16:02     Странности в поведении strncpy #10
OstapBender, не совсем. data() возвращает массив без дополнения нулём.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.07.2011, 16:30  [ТС]     Странности в поведении strncpy #11
Мне всё же интересно почему на ноутбуке компилировался вариант с #include <string>, а на стационранике мне понадобилось уже подключать cstring? Комплитор тот же, среда та же, ничего же не изменялось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 16:32     Странности в поведении strncpy
Еще ссылки по теме:

ошибка 4996 strncpy C++
Аналог strncpy и strncmp для типа string C++
Поведение функции strncpy C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 16:32     Странности в поведении strncpy #12
Gepar, что, компилятор с точностью до версии совпадает? Библиотеки имеют свойство меняться от версии к версии. Чудес не бывает.
Yandex
Объявления
02.07.2011, 16:32     Странности в поведении strncpy
Ответ Создать тему
Опции темы

Текущее время: 02:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru