#include <iostream>
#define MAXLENGTH 128
int main()
{
char word[MAXLENGTH];
std::cin.getline(word, MAXLENGTH);
word[strlen(word) + 1] = 't';
word[strlen(word) + 2] = 0x30;
std::cout << word;
return 0;
}
Почему не выводит текст с буквой t на конце?
Правильно ли я пытаюсь задать конец строки?
Почему не выводит текст с буквой t на конце?
Конец C-строки обозначется сиволом \0
. После вызова getline
буфер word
содержит символ \0
в позиции word[strlen(word)]
. Этот и есть конец вашей строки.
Вы записываете в этот буфер какие-то дополнителные символы после символа конца строки, в позиции word[strlen(word) + 1]
и word[strlen(word) + 2]
. Эти символы не являются частью строки и никакого влияния не ее содержимое не оказывают.
Что вы и наблюдаете.
Если вы хотели добавить символ 't'
к вашей исходной строке, то добавлять его надо было вместо символа конца строки, а не после него. И затем надо не забыть сформировать символ конца строки на новом месте
size_t len = std::strlen(word);
word[len] = 't';
word[len + 1] = '\0';
Правильно ли я пытаюсь задать конец строки?
Я не вижу в вашем коде никаких явных попыток "задать конец строки". О чем речь?
strcat(word,"t")
будет проще и надежнее... Но если уж вы хотите именно так, как хотите :) - то
int l = strlen(word);
word[l] = 't';
word[l+1] = 0;
Так как после добавления t
уже никто не гарантирует, что следующий за ним символ - нулевой...
Ну и, понятно, в обоих случаях остается молиться, чтоб места в word
хватило на добавление...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как правильно в SDL2 перемещать окно без заголовка, по аналогии с winapi используя WM_NCHITTEST
К примеру есть такой простой код
Я пытаюсь сравнить два элемента массива, текущий и предыдущий, ставлю break; чтобы закончить выполнение цикла и выводится такое сообщение в консоль...