Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Строки в C

Учитывайте нулевой терминатор, вместимость буфера и функции string.h.

Открыть в компиляторе

Строки в C
Учитывайте нулевой терминатор, вместимость буфера и функции string.h.

Строка C заканчивается нулевым байтом. Буфер должен вмещать и текст, и терминатор. strlen считает символы до нуля, но сама по себе не знает вместимость объекта.

fgets получает вместимость и может сохранить перевод строки. При копировании и соединении строк проверяйте свободное место и наличие терминатора. Не изменяйте строковые литералы и не читайте неограниченный ввод в фиксированный буфер.

Сравнивайте содержимое через strcmp, а не адреса через ==. Проверьте пустую и длинную строку, а также пробелы внутри. Побайтовая обработка не обязательно соответствует подсчёту символов Unicode.

Код C

#include <stdio.h>
#include <string.h>

int main(void) {
    printf("=== C Strings: Declaration & Manipulation ===\n\n");

    // 1. Mutable stack array
    char greeting[32] = "Hello";
    char name[] = "Programmer";

    printf("Initial greeting: %s (Length: %zu)\n", greeting, strlen(greeting));
    printf("Name: %s (Length: %zu)\n", name, strlen(name));

    // 2. Safe string concatenation with snprintf
    char full_message[64];
    snprintf(full_message, sizeof(full_message), "%s, %s! Welcome to C.", greeting, name);
    printf("Concatenated: %s\n", full_message);

    // 3. In-place string mutation
    greeting[0] = 'J'; // "Jello"
    printf("Modified greeting: %s\n", greeting);

    // 4. String comparison
    char word1[] = "apple";
    char word2[] = "banana";
    int cmp = strcmp(word1, word2);
    if (cmp < 0) {
        printf("\"%s\" comes before \"%s\" alphabetically (cmp = %d)\n", word1, word2, cmp);
    }

    // 5. String reversal in-place
    char text[] = "Online C Compiler";
    size_t len = strlen(text);
    for (size_t i = 0; i < len / 2; i++) {
        char temp = text[i];
        text[i] = text[len - 1 - i];
        text[len - 1 - i] = temp;
    }
    printf("Reversed string: %s\n", text);

    return 0;
}
Открыть в компиляторе

Ожидаемый вывод

=== C Strings: Declaration & Manipulation ===

Initial greeting: Hello (Length: 5)
Name: Programmer (Length: 10)
Concatenated: Hello, Programmer! Welcome to C.
Modified greeting: Jello
"apple" comes before "banana" alphabetically (cmp = -1)
Reversed string: reliPmoC C enilnO

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.