Добрый вечер. Осмелюсь снова потревожить сообщество ))
имеется вот такой вот код:
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int SimbolEntersCount()
{
unsigned int i;
char s[] = "012 34 567 89 ABCDEF";
char re;
cout << "xxx" << endl;
char temp[4] = {10, 13, 32, 0};
bool p = 0;
for (i=1;i<sizeof(s);++i)
{ int i_;
cout << " i = " << i << endl;
for (i_ = 0; i_<3; ++i_)
{
cout << " i = " << i << "\ti_ = "<< i_<< endl;
if (p==1){break;};
if (s[i]!=temp[i_])
{
strcat (&re, &s[i]);
p=1;
cout << " "<< re <<endl;
};
};
p=0;
};
return re;
};
int main(){int a = SimbolEntersCount();}
возможно код не красив, но я только учусь..
выдавал ошибку сегментирования.. покопавшись пришел к этому:
kisly@kisly-desktop:~/c++/temp_2/bin/Debug$ gdb ./temp_2
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/kisly/c++/temp_2/bin/Debug/temp_2...done.
(gdb) run
Starting program: /home/kisly/c++/temp_2/bin/Debug/temp_2
xxx
i = 1
i = 1 i_ = 0
Program received signal SIGSEGV, Segmentation fault.
0x002dbf67 in strcat () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0x002dbf67 in strcat () from /lib/tls/i686/cmov/libc.so.6
#1 0x080489b4 in SimbolEntersCount () at /home/kisly/c++/temp_2/main.cpp:29
#2 0x32314645 in ?? ()
#3 0x20343320 in ?? ()
#4 0x20373635 in ?? ()
#5 0x41203938 in ?? ()
#6 0x45444342 in ?? ()
#7 0x20323146 in ?? ()
#8 0x35203433 in ?? ()
#9 0x38203736 in ?? ()
... ... ...
насколько я понимаю происходит выход за рамки массива. так ? как это исправить ? спрашиваю т.к. уже не первый день думаю на этим.
В теории код должен копировать сл. код ( строки вывода на экран и там и там не имеют значения, они для контроля ):
begin
s:= '012 34 567 89 ABCDEF';
Result := '';
writeln(s, ' ', Length(s));
for i := 1 to Length(s) do
begin writeln('i = ',i);
if not(s[i] in [' ',#10,#13]) then
Result:=Result+s[i];
writeln(Result);
end;
end.
Вопросы:
1. как заставить работать программу ?
2. есть ли в с++ аналог делфийского IN ? чтобы не делать таких вавилонов
3. что означает символ & (амперсанд \ символьное and) ? на другом форуме мне посоветовали его поставить, чтобы компилирование вообще состаялось ((
4. Почему в char temp[4] = {10, 13, 32, 0}; при знесении не 4х, а 5 элементов массива компилятор грязно ругается ? ведь зарезервировал я 5 элементов (0,1,2,3,4) ?