|
|
|
|
|
для: bronenos
(25.12.2008 в 00:17)
| | Здраствуйте:) Доказывать не буду :) Так как не встречался с подобными проблемами :) А если и встречался то не делал их глобольными :) | |
|
|
|
|
|
|
|
для: exp
(24.12.2008 в 16:42)
| | delete для переменных, созданных new
delete[] для указателей, созданных new[] | |
|
|
|
|
|
|
|
для: AlexandrStep
(24.12.2008 в 13:43)
| | strcpy() и взаправду удобнее :)
насчёт [] или не [] , чем докажите?)
тут был аргумен в пользу []
, т.к. некоторые компиляторы могут ругаться если не [], а str = "..." у меня только работает если *str="..." :)
str[] ="" однозначно удобнее ;) её sizeof'ом хоть померить можно всё остальное похоже просто указатели
#include <iostream>
#include <malloc.h>
#include <conio.h>
using std::cout;
int main()
{
char * str = new char[200];
char * str4 = ( char * ) calloc( 200, sizeof( char ) );
strcpy( str, "hello" );
strcpy( str4, "hello" );
cout << sizeof str << " " << sizeof *str << " " << sizeof &str
<< " == str\n" << sizeof str4 << " " << sizeof *str4 << " " << sizeof &str4 << " == str4\n";
char * str2 = "helloworld";
cout << sizeof str2 << " " << sizeof *str2 << " " << sizeof &str2 << " == str2\n";
char str3[] = "helloworld";
cout << sizeof str3 << " " << sizeof *str3 << " " << sizeof &str3 << " == str3\n\n"
<< str2 << " " << str3 << "\n" << str4 << "== str4\n" << str << "== str\n\n";
free( str4 );
cout << str4 << " == str4\n";
delete str4;
cout << str4 << "== str4\n";
delete[] str;
cout < < str << "== str\n";
delete str;
cout << str << "== str\n";
getch();
return 0;
} | а delete[] str; и delete str; очень похожи на одно и то-же
, даже одно и тоже после них извлекается из указателя | |
|
|
|
|
|
|
|
для: StarWorm
(19.11.2008 в 23:04)
| | str="hello my dear world ! !!";//если я не ошибаюсь strcpy для строк инкто не отменял
strcpy(str,"hello my dear world ! !!");
также не работает delete [] str!
строка удаляется как delete str; | |
|
|
|
|
|
|
|
для: StarWorm
(19.11.2008 в 23:04)
| | Вроде так
Если что, гуру постарше меня поправят
char* str - str объявляется как указатель на массив из char элементов, и ему присваивается выделенный в памяти статический char массив, который поэтому нельзя изменять
char str[] - [] аналогично *, но при этом если помните, динамическое выделение происходит при помощи []. Видимо, из-за динамичности выделенной памяти и возможна такая манипуляция.
Я уже много пишу на Си, но честно говоря, никогда не думал о таком вопросе и всегда пользовался [], если надо было вогнать массив с неизменными значениями, и *, если надо просто объявить переменную как указатель. | |
|
|
|
|
|
|
| Хочу узнать в чем заключается принципиальное отличие!
При написании такого кода:
#include "stdafx.h"
# include <stdio.h>
# include <conio.h>
# include <iostream>
using namespace std;
void clearStr(char* arrStr)
{
char* tmp;
int result;
while((tmp=strstr(arrStr," "))!=NULL)
{
result=(int)(tmp-arrStr+1);
while(arrStr[result]!=NULL)
{
arrStr[result++]=arrStr[result+1];
}
}
}
int main()
{
char* str = new char[200];
gets(str);
str="hello my dear world ! !!";
char str1[]="hello my dear world ! !!";
clearStr(str);
clearStr(str1);
cout<<str<<"\n"<<str1;
delete [] str;
getch();
return 0;
} |
прога должна убирать "лишние" пробелы, не включая начальные и конечные! :)
В итоге если я заполняю char* str = "..." то при передаче в функцию я не могу ищменять символы, а также не работает delete [] str!
Если же я заполняю при помощи gets(str) ну или cin.getline(str,255) - то все нормально!
Ну а если я заполняю как char str[]="..." то тоже все пучком и ничто нигде не ругается!
Просто я уже оч. привык работать с указателями и запись вида 'typedef' vae[] для меня является дикой... | |
|
|
|
|