Очень странная ошибка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fl00der, 24 Oct 2012.

  1. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Code:
            char* s=Memo1->Text.c_str();
            for(int i=1;i<=strlen(s);i++) {
                    ShowMessage(s[i]);
    
            }
    Вводим в Memo1 строку "hahaha". Казалось бы, каждая буква из строки должна последовательно выводиться в месседжбоксах, но нет. Выводится a. Эксперементально я установил, что выводится второй символ и только он.
    Почему?
     
    _________________________
  2. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    920
    Reputations:
    862
    for(int i=1;i<=strlen(s);i++)

    Ты цикл запустил с 1, в то время как символы строки начинаются с 0 позиции...
     
    _________________________
  3. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Поменял, просто я в паскале привык что нулевой символ не задействован.
    Но проблема не решилась, код теперь
    Code:
     char* s=Memo1->Text.c_str();
            for(int i=0;i<=strlen(s);i++) {
                    ShowMessage(s[i]);
    
            }
    Вводим hahaha в Memo1, выскакивает два меседжбокса: в первом одна буква h, во втором пусто.
     
    _________________________
  4. ViDoG

    ViDoG New Member

    Joined:
    30 Apr 2010
    Messages:
    9
    Likes Received:
    3
    Reputations:
    0
    Если сделать ввод в Edit, а вывод результата в Memo, то все работает верно и каждый символ введенной строки по очереди записывается в новую строку:
    Code:
    void __fastcall TForm1::Button1Click(TObject *Sender) {
    	char* str = Edit1->Text.c_str();
    
    	for (int i = 0; i < strlen(str); i++) {
    		Memo1->Lines->Add(str[i]);
    	}
    }
    Или тебе нужен вывод именно в ShowMessage?
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Попробуй передавать указатель на строку, то есть:
    Code:
    ShowMessage(&s[i]);
     
  6. leeex

    leeex New Member

    Joined:
    26 Jul 2011
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Попробуй поменять переменную "s" с char* на char.