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

string -> char[] сбой компиляции - C++

Восстановить пароль Регистрация
 
StupidTrue
46 / 1 / 0
Регистрация: 06.11.2010
Сообщений: 85
22.04.2013, 23:47     string -> char[] сбой компиляции #1
Добрый вечер, помогите пожалуйста разобраться.
Программа записывает строку string в начало массива и ЗАДАННОЙ длиной 132 символа.
проблема:
string Record_Type="abcde"; - работает
string Record_Type="abc"; - не работает
и в конце stroka добавляется пустой элемент, как не передавать его в массив char[]?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <cstdlib>
#include <iostream>
#include <string> 
 
using namespace std; 
 
int main(int argc, char *argv[])
{   
    
 
setlocale(LC_ALL, "Russian");
string stroka="abcde";   
char NDB[132];
    
    //вставляем в начало "stroka"
    for (int i=0; int j=stroka.length(); ++i){
        NDB[i]=stroka[i];    
    }
    // вывод
    for (int i=0; i<20; ++i){
        cout<<NDB[i]<<endl;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Миниатюры
string -> char[]  сбой компиляции   string -> char[]  сбой компиляции  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
22.04.2013, 23:49     string -> char[] сбой компиляции #2
C++
1
for (int i=0; i<stroka.length(); ++i) /*  i<    !!! */
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11818 / 6797 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 2
Завершенные тесты: 1
22.04.2013, 23:52     string -> char[] сбой компиляции #3
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[]){
    setlocale(LC_ALL, "Russian");
    string stroka="abcde";
    int strsize=stroka.size();
    for(int i=0;i<strsize;++i)
        cout<<stroka[i]<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
StupidTrue
46 / 1 / 0
Регистрация: 06.11.2010
Сообщений: 85
22.04.2013, 23:58  [ТС]     string -> char[] сбой компиляции #4
спасибо, но не помогло
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
for (int i=0; i<stroka.length(); ++i) /*  i<    !!! */
Миниатюры
string -> char[]  сбой компиляции  
StupidTrue
46 / 1 / 0
Регистрация: 06.11.2010
Сообщений: 85
22.04.2013, 23:59  [ТС]     string -> char[] сбой компиляции #5
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[]){
    setlocale(LC_ALL, "Russian");
    string stroka="abcde";
    int strsize=stroka.size();
    for(int i=0;i<strsize;++i)
        cout<<stroka[i]<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
спасибо, все работает НО ЭТО не то, что нужно. Нужно записывать строку string в начало массива и ЗАДАННОЙ длиной 132 символа.
а у вас просто вывод строчки...
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.04.2013, 00:06     string -> char[] сбой компиляции #6
спасибо, но не помогло
У тебя в массиве мусор ...
StupidTrue
46 / 1 / 0
Регистрация: 06.11.2010
Сообщений: 85
23.04.2013, 00:08  [ТС]     string -> char[] сбой компиляции #7
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[]){
    setlocale(LC_ALL, "Russian");
    string stroka="abcde";
    int strsize=stroka.size();
    for(int i=0;i<strsize;++i)
        cout<<stroka[i]<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Использовал ваш пример и адаптировал свой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdlib>
#include <iostream>
#include <string> 
using namespace std; 
int main(int argc, char *argv[])
{   
    
 
setlocale(LC_ALL, "Russian");
string stroka="ab";   
char NDB[132];
int strsize=stroka.size();
    // ГўГ±ГІГ*âëÿåì Гў Г*Г*Г·Г*ëî "stroka"
    for (int i=0;i<strsize; ++i){
        NDB[i]=stroka[i];    
    }
    // âûâîä
    for (int i=0; i<20; ++i){
        cout<<NDB[i]<<endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
Все работает, спасибо!

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
У тебя в массиве мусор ...
я знаю, ведь я заполнил только пару первых членов... остальные потом
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11818 / 6797 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 2
Завершенные тесты: 1
23.04.2013, 00:13     string -> char[] сбой компиляции #8
Скопировать можно так:
C++
1
strcpy(NDB,stroka.c_str());
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 06:27     string -> char[] сбой компиляции
Еще ссылки по теме:

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) C++
C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
C++ string[] в char[][] или char[]

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

Или воспользуйтесь поиском по форуму:
StupidTrue
46 / 1 / 0
Регистрация: 06.11.2010
Сообщений: 85
23.04.2013, 06:27  [ТС]     string -> char[] сбой компиляции #9
Цитата Сообщение от Croessmah Посмотреть сообщение
Скопировать можно так:
C++
1
strcpy(NDB,stroka.c_str());
Спасибо, а как копировать string в начало или средину массива?? У меня другие цели, если я вас правильно понял.
у меня была задача:
Составить программу для формирования записей о наземных РНС УКВ диапазона NDB класса по стандарту ARINC 424.
причем
Запись о VOR/DME Boryspil’ имеет вид:
SEEUD□UKBBUK□BRP□□□UK011590VD□□□N50170900E030540300BRP□N50170900E030540300E0060001290□□□□□WGEBoryspil’□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□ – пробел

я решил ее так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <cstdlib>
#include <iostream>
#include <string> 
#include <fstream>
 
using namespace std; 
int main(int argc, char *argv[])
{   
    
 
setlocale(LC_ALL, "Russian");
string Record_Type ="S";  
string Area_Code = "EEU";
string Section_Code ="D";
string Airport_ICAO_Identifier="UKBB";
string ICAO_Code = "UK";
string Blank1= " ";
string NDB_Identifier = "BO";
string Blank2= "  ";
string Continuation_Record_No="0";
string NDB_Frequency = "12900";
string NAVAID_Class  = "N";
string NDB_Latitude ="N50374300";
string NDB_Longitude  = "E030532200";
string NDB_Elevation = "1200";
string NUL="0";
string Figure_of_Merit="0";
string ILSDME_Bias_and_Frequency_Protection="     ";
 
 
cout<<"Введите Datum Code (Код глобальной системы координат)";
string Datum_Code;
cin>>Datum_Code;
if(Datum_Code=="WGS-84"){
Datum_Code="WGE";
}
cout<<endl; 
string NDB_Name="Bohdanivka";
string File_Record_No_and_Cycle_Date="         ";
 
char NDB[132];
    // вставляем в начало "stroka"
    for (int i=0;i<Record_Type.size(); ++i){
        NDB[i]=Record_Type[i];    
    }
    
     for (int i=0; i<Area_Code.size();i++){
        NDB[Record_Type.size()+i]=Area_Code[i];    
    }
    for (int i=0; i<Section_Code.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+i]=Section_Code[i];    
    }
    for (int i=0; i<Airport_ICAO_Identifier.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+i]=Airport_ICAO_Identifier[i];    
    }
    
    for (int i=0; i<ICAO_Code.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+i]=ICAO_Code[i];    
    }
     for (int i=0; i<Blank1.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+i]=Blank1[i];
    }
  
// NDB_Identifier
  if (NDB_Identifier.size()==4){
      for (int i=0; i<NDB_Identifier.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+Blank1.size()+i]=NDB_Identifier[i];
      }
  }
  
  if (NDB_Identifier.size()<4){                            
      for (int i=0; i<NDB_Identifier.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+Blank1.size()+i]=NDB_Identifier[i];    
      }  
      for (int i=0; i<4-NDB_Identifier.size(); ++i){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+Blank1.size()+NDB_Identifier.size()+i]=Blank1[0];
      }                    
  }
// NDB_Identifier
  
    for (int i=0; i<Blank2.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+i]=Blank2[i];
    }
    
    for (int i=0; i<ICAO_Code.size();i++){
        NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+i]=ICAO_Code[i];
    }
    
    
NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()]=Continuation_Record_No[0];
 
for (int i=0; i<NDB_Frequency.size();i++){
    NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+i]=NDB_Frequency[i];
}
 
 
// NAVAID_Class
  if (NAVAID_Class.size()==5){
      for (int i=0; i<NAVAID_Class.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+i]=NAVAID_Class[i];
      }
  }
  
  if (NAVAID_Class.size()<5){                            
      for (int i=0; i<NAVAID_Class.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+i]=NAVAID_Class[i];    
      }  
      for (int i=0; i<5-NAVAID_Class.size(); ++i){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+NAVAID_Class.size()+i]=Blank1[0];
      }                    
  }
// NAVAID_Class  
 
 
for (int i=0; i<NDB_Latitude.size();i++){
         NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+5+i]=NDB_Latitude[i];    
}  
 
for (int i=0; i<NDB_Longitude.size();i++){
NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+5+NDB_Latitude.size()+i]=NDB_Longitude[i];    
} 
for (int i=0; i<28;i++){
NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+NDB_Frequency.size()+5+NDB_Latitude.size()+NDB_Longitude.size()+i]=Blank1[0];
}
     
// NDB_Elevation
  if (NDB_Elevation.size()==5){
      for (int i=0; i<NAVAID_Class.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+i]=NDB_Elevation[i];
      }
  }
  
  if (NDB_Elevation.size()<5){ 
       for (int i=0; i<5-NDB_Elevation.size(); ++i){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+i]=NUL[0];
      }                              
      for (int i=0; i<NDB_Elevation.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+(5-NDB_Elevation.size())+i]=NDB_Elevation[i];    
      }  
                      
  }
// NDB_Elevation  
 
NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5]=Figure_of_Merit[0];    
 
for (int i=0; i<ILSDME_Bias_and_Frequency_Protection.size();i++){
    NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+i]=ILSDME_Bias_and_Frequency_Protection[i];    
}      
 
 
for (int i=0; i<Datum_Code.size();i++){
    NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+ILSDME_Bias_and_Frequency_Protection.size()+i]=Datum_Code[i];    
}      
    
    
     
// NDB_Name
  if (NDB_Name.size()==30){
      for (int i=0; i<NDB_Identifier.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+ILSDME_Bias_and_Frequency_Protection.size()+i]=NDB_Name[i];
      }
  }
  
  if (NDB_Name.size()<30){                            
      for (int i=0; i<NDB_Name.size();i++){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+ILSDME_Bias_and_Frequency_Protection.size()+Datum_Code.size()+i]=NDB_Name[i];    
      }  
      for (int i=0; i<30-NDB_Name.size(); ++i){
          NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+ILSDME_Bias_and_Frequency_Protection.size()+Datum_Code.size()+NDB_Name.size()+i]=Blank1[0];
      }                    
  }
// NDB_Name
for (int i=0; i<9; ++i){
         NDB[Area_Code.size()+Record_Type.size()+Section_Code.size()+Airport_ICAO_Identifier.size()+ICAO_Code.size()+5+Blank2.size()+ICAO_Code.size()+Continuation_Record_No.size()+5+NDB_Frequency.size()+NDB_Latitude.size()+NDB_Longitude.size()+28+5+1+ILSDME_Bias_and_Frequency_Protection.size()+Datum_Code.size()+30+i]=Blank1[0];
}     
 
    // вывод
    for (int i=0; i<132; ++i){
        cout<<NDB[i];
    }
    cout<<endl;
    
// запись в results.txt файл
ofstream os("results.txt");
for (int i=0; i<132; i++)
    {
        os<<NDB[i];
    }
os.close();
cout<<endl;   
cout<<"Данные были успешно записаны в results.txt"<<endl;        
        
        
    system("PAUSE");
    return EXIT_SUCCESS;
}
результат:
SEEUDUKBBUK BO UK012900N N50374300E030532200 012000 WGEBohdanivka
Миниатюры
string -> char[]  сбой компиляции   string -> char[]  сбой компиляции  
Yandex
Объявления
23.04.2013, 06:27     string -> char[] сбой компиляции
Ответ Создать тему
Опции темы

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