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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

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

02.07.2011, 15:23. Просмотров 1055. Ответов 11
Метки нет (Все метки)

Я написал программу на ноутбуке используя 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 (C++):

strncpy - C++
Дана строка: djh,dfkh,sdj. Как последовательно по отдельности записать в strncpy текстовые части: djh dfkh sdj

про strncpy () - C++
привет=))) вот чето с этой функцией не пойму пример есть #include &lt;iostream&gt; using namespacr std; int main () { const int...

Ошибка в функции (strncpy) - C++
Надо прочитать файл содержащий что-то подобное: 1. Nomer reisa: 1 ves bagazha: 1.50 (kg) kolichestvo veshei: 5 2. Nomer reisa: 1 ves...

Поведение функции strncpy - C++
Доброго времени суток, уважаемые форумчане. Была необходимость решить задачу такого содержания: Пользователь вводит строку с помощью char...

ошибка 4996 strncpy - C++
#include&lt;iostream&gt; #include&lt;Windows.h&gt; #include&lt;fstream&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt; #include &lt;conio.h&gt; #include...

Как работает strncpy()? - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; char*input(char*word,int&amp;size){ cin.getline(word,size); ...

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

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

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

Задание по копированию строк, strncpy - C++
помогите пожалуйста,никак не могу разобраться c функцией srncpy, нужно при условии int strncpy(char*s1,char*s2,int N) ,т.е копировать...

Ошибка предположительно в strncpy(word, p1, len) - C++
Есть простенький обучающий пример: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;string.h&gt; using...

Аналог strncpy и strncmp для типа string - C++
Подскажите, как проводить операции сравнения и копировании с двумя строками типа string, при чём только над определённым количеством...

Функция strncpy не работает на строках длинее трех символов - C++
Подскажите, написал код... Хочу копировать каждое слово в g (т.е. s3). Функцией strncpy. Длину находит правильную, но при копировании...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.07.2011, 16:32
Ответ Создать тему
Опции темы

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