Правильный стиль при работе со строками - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго дня. Суть проблемы:
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[6];
    const char* he = "helios";
    strcpy(str,he);
    int len = strlen(str);  // len == 6
    return 0;
}
Таким образом, завершающий '\0' находится за пределами адресного пространства буфера str, в позиции str[7]. Вопос: нужно ли в буфере str резервировать дополнительную ячейку для '\0' (char str[

7

]), чтобы нуль находился внутри массива, а не за пределами его? Функции со <string.h> вроди бы работают нормально, но какой здесь стиль/подход наилучший? gcc v4.8.1-1 жует и не ругается.
$ gcc -std=c99 -Wall -Wpedantic -Wextra
А вот VS2012 во время пошагового выполнения ругается на stack corruption around 'str' (вроде так) Спасибо заранее.

Решение задачи: «Правильный стиль при работе со строками»

textual
Листинг программы
#include <stdio.h>
 
int main(void) {
    char s1[] = "abc", s2[] = "def";
 
    strcpy(s2, "xxxxx");
    printf("%s", s1);
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаем файл стандартного ввода/вывода
  2. Объявляем функцию main, которая ничего не возвращает и не принимает аргументов
  3. Объявляем две переменные типа char s1 и s2, которые содержат строки abc и def соответственно
  4. Копируем строку xxxxx в переменную s2 с помощью функции strcpy
  5. Выводим на экран содержимое переменной s1 с помощью функции printf и указываем, что нужно вывести строку, используя %s как форматный символ
  6. Завершаем выполнение функции main и возвращаем 0, что означает успешное выполнение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы