почему это происходит (см. изображение)?

Нет необходимости в событии TextChanged. Вы можете использовать событие KeyPress для TextBox.

if(e.KeyCode==Keys.Enter){
  if(textBox1.Text = "some string"){
    //your code here...
  }
}
6
задан ObieMD5 19 July 2013 в 15:27
поделиться

7 ответов

Это будет в конечном счете seg отказ, но прежде, который это распечатает любые байты, находятся на той же странице. Вот почему Вы видите случайные символы на экране.

Они могут включать escape-последовательности для изменения (говорят) что кодировка символов консоли. Вот почему Вы заканчиваете с мусором, когда Вы вводите на консоли после того, как из этого выходят, также.

20
ответ дан 8 December 2019 в 02:13
поделиться

В дополнение к тому, что все остальные сказали в отношении Вас игнорирующий строковый символ терминала и просто печатающий волей-неволей, что находится в памяти мимо строки, причина, почему Ваша командная строка является также "мусором", состоит в том, что путем печати конкретного "непечатного" символа, терминальный сеанс покинули в странном текстовом режиме. (Я не знаю, какой символ это или какое изменение режима это делает, но возможно кто-то еще может передать по каналу приблизительно в этом, который знает лучше, чем я.)

7
ответ дан 8 December 2019 в 02:13
поделиться

Поскольку у Вас есть бесконечный цикл (while(1)), и Вы продолжаете получать текущее значение указателя (*s), и затем перемещая указатель один символ вперед (s++). Это имеет эффект похода хорошо мимо конца строки в "мусор" (неинициализированная память), который печатается к консоли в результате.

7
ответ дан 8 December 2019 в 02:13
поделиться

Ваш цикл не завершается, таким образом, println печатает то, что находится в памяти после текста, который Вы пишете; в конечном счете это получит доступ к памяти, которую не позволяется считать, вызывая его к segfault.

Можно изменить цикл, как другие предположили, или можно использовать в своих интересах то, что в c, нуль является ложью и пустым указателем (который завершается, все строки) также нуль, таким образом, можно создать цикл как:

while (*s) {

Вместо:

while (*s != '\0')

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

1
ответ дан 8 December 2019 в 02:13
поделиться

Вы просто распечатываете то, что находится в памяти, потому что Ваш цикл не останавливается в конце строки. Каждый случайный байт интерпретируется как символ. Это будет seg давать сбой, когда Вы достигнете конца страницы памяти (и войдите в нечитабельную территорию).

7
ответ дан 8 December 2019 в 02:13
поделиться

Расширение очень немного на ответах, данных здесь (которые все превосходны)... Я столкнулся с этим несколько раз сам, когда я только начинал с C, и это - легкая ошибка сделать.

Быстрая тонкая настройка к Вашему while цикл зафиксирует его. Все остальные дали Вам, почему, я подниму трубку Вас с как:

#include <stdio.h>

int main() {
    char *s = "lolololololololol";
    while (*s != '\0') {
        printf("%c", *s);
        s++;
    }
}

Обратите внимание на это вместо бесконечного цикла (while(1)), мы делаем проверку цикла, чтобы гарантировать, что указатель, который мы вытягиваем, не является пустым разделителем для строки, таким образом избегая переполнения, с которым Вы встречаетесь.

Если Вы застреваете, абсолютно нуждаясь while(1) (например, если это - домашняя работа, и преподаватель хочет, чтобы Вы использовали ее), используйте break ключевое слово для выхода из цикла. Следующие запахи кода, по крайней мере, мне, но это работает:

#include <stdio.h>

int main() {
    char *s = "lolololololololol";
    while (1) {
        if (*s == '\0')
            break;
        printf("%c", *s);
        s++;
    }
}

Оба производят тот же консольный вывод, без разрыва строки в конце:

lolololololololol

2
ответ дан 8 December 2019 в 02:13
поделиться

Кроме того, можно обычно возвращаться к командной строке при помощи команды 'сброса', вводя вслепую, конечно. (тип Вводит, сбросил, Входит),

0
ответ дан 8 December 2019 в 02:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: