История изменений
Исправление Vic, (текущая версия) :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти: в переменной String всегда
// будет адрес первого символа строки в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
// Функции malloc()/realloc() по сути просят выделить памяти программе в
// адресном пространстве процессора, а все контрольные механизмы получают
// и запоминают выделенную область.
// Т.е. программа прямо в процессе своей работы просит выделить ей память.
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки на 1 символ.
String = realloc(String, StringLen+1); // "Расширить" память на 1 символ.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
free(String); // Сообщить всем, что эта память больше не нужна.
String = NULL; // Программа помечает себе, что памяти под строчку больше нет, чтобы
// случайно не начать ей пользоваться. NULL - это защитный адрес в памяти,
// т.е. если программа попробует что-то читать или писать по адресу NULL, то
// всем защитным механизмам станет ясно, что программа ошиблась.
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти: в переменной String всегда
// будет адрес первого символа строки в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
// Функции malloc()/realloc() по сути просят выделить памяти программе в
// адресном пространстве процессора, а все контрольные механизмы получают
// и запоминают выделенную область.
// Т.е. программа прямо в процессе своей работы просит выделить ей память.
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки на 1 символ.
String = realloc(String, StringLen+1); // "Расширить" память на 1 символ.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
free(String); // Программе память больше не нужна.
String = NULL;
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти: в переменной String всегда
// будет адрес первого символа строки в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
// Функции malloc()/realloc() по сути просят выделить памяти программе в
// адресном пространстве процессора, а все контрольные механизмы получают
// и запоминают выделенную область.
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки на 1 символ.
String = realloc(String, StringLen+1); // "Расширить" память на 1 символ.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти: в переменной String всегда
// будет адрес первого символа строки в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки на 1 символ.
String = realloc(String, StringLen+1); // "Расширить" память на 1 символ.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти: в переменной String всегда
// будет адрес первого символа строки в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// по адресу из указателя String, является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер строки в памяти по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// String является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер переменной по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка
// String является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер переменной по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку. Теперь строка String является существующей и пустой строкой.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исправление Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер переменной по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *String = NULL; // Указатель на строку в памяти.
int StringLen = 0; // Длина строки, без учета символа "конец строки".
char Symbol = (char)0; // Сюда будем получать символ с клавиатуры.
String = malloc(StringLen+1); // Программе нужен 1 символ под "конец строки".
*(String+StringLen) = (char)0; // Поместить "конец строки" в строку.
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar(); // Получить символ с клавиатуры.
if (Symbol != '\n')
{
StringLen++; // Увеличить размер строки.
String = realloc(String, StringLen+1); // Перевыделить память, на 1 символ больше.
*(String+StringLen-1) = Symbol; // Поместить символ в строку.
Symbol = (char)0;
*(String+StringLen) = Symbol; // Поместить символ "конец строки" в строку.
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}
Исходная версия Vic, :
Например, считываем символы, вводимые с клавиатуры, постепенно увеличиваем размер переменной по мере ввода символов.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char Symbol = (char)0;
int StringLen = 0;
char *String = NULL;
String = malloc(StringLen+1);
*(String+StringLen) = (char)0;
printf("Enter string and press Enter: ");
while (Symbol == (char)0)
{
Symbol = getchar();
if (Symbol != '\n')
{
StringLen++;
String = realloc(String, StringLen+1);
*(String+StringLen-1) = Symbol;
Symbol = (char)0;
*(String+StringLen) = Symbol;
};
};
printf("\nString = \"%s\"\n", String);
return 0;
}