Код: Выделить всё
char *res=new char[140]; // a 140-byte array
memset(res,0,140);
res[0]=0;
return res;
Код: Выделить всё
char res[140];
memset(res,0, sizeof(res) );
return res;
Код: Выделить всё
char *res=new char[140]; // a 140-byte array
memset(res,0,140);
res[0]=0;
return res;
Код: Выделить всё
char res[140];
memset(res,0, sizeof(res) );
return res;
Код: Выделить всё
int size = 256; // начальный размер строки
char *veryverylongstring = new char[size];
// тут проверка на длину входящего сообщения/файла/чего-то ещё
while (size < strLength) // если размер меньше длины,
{
delete [] string;
size *= 2;
char *string = new char[size]; // увеличили длину вдвое и инициализировали заново
// тут считываем данные ещё раз, если опять длина меньше - цикл повторится
}
// делаем что-то со строкой
delete [] string;
Мда :)NiGHt-LEshiY писал(а):Fire666
Предположим, что в программу будут вводиться данные от 1 байта до 2 с чем-то гигов (ограничение 32 бит).
Если юзеру нужно 10 байт, а статически будут выделяться все 2 гига? Получится расчудесно.
Код: Выделить всё
char *pointer;
__asm {
sub esp, size
mov pointer, esp
}
Код: Выделить всё
char *s = new char[200];
s[0]=0;
strcat(s, "Hello world");
Т.е. на входе она принимает заканчивающиеся нулем строки. Условие выполнено? Да.Parameters
strDestination
Null-terminated destination string.
strSource
Null-terminated source string.
Перевод:Remarks
The strcat function appends strSource to strDestination and terminates the resulting string with a null character. The initial character of strSource overwrites the terminating null character of strDestination.
Т.е. в итоге выполнения приведенного выше куска кода мы получим в s поинтер на выделенный блок памяти, который будет содержать следующие символы:Функция strcat добавляет strSource к strDestination и завершает результирующую строку нулевым символом. Первый символ strSource перезаписывает собой завершающий нуль-символ strDestination.
Код: Выделить всё
printf("%s", s);
Код: Выделить всё
char *s; // Объявление указателя. Самого по себе его нельзя использовать, он не имеет под собой реального пространства для хранения данных.
s = new char[200] // Выделение реального блока памяти для хранения данных. Адрес блока сохраняется в s. Размер char равен 1 байту, поэтому указывается что нужен блок не в один символ, а массив.
s[0] = 0; // Функции по работе со строками требуют заканчивающиеся нулем строки.
delete [] s; // Освобождение блока памяти. Иначе он так и останется висеть. Используются [] чтобы delete знала, что освобождается массив.
Код: Выделить всё
if(ans=='y'){
fopen_s(&fp,fn,"r");
//...
}
fclose(fp);
Код: Выделить всё
if(ans=='y'){
fopen_s(&fp,fn,"r");
//...
fclose(fp);
}
Код: Выделить всё
while(bc!='\n'){
bc=fgetc(fp);
buf[i]=bc;
i++;
}
Лучше сразу привыкать к правильному программированию, чем постоянно создавать себе мнимые исключения из правил.В данном случае, нет смысла занулять весь буфер.