LINUX.ORG.RU

История изменений

Исправление 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;
}