【问题标题】:Simple substring program won't work简单的子字符串程序不起作用
【发布时间】:2014-06-09 09:52:44
【问题描述】:

我的任务是在tbUnos 中输入一些文本,并在label1 中打印出字符串的前两个字母。我刚刚开始学习 Visual C++,我正在努力解决问题。

私有:System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {

      String^ sUnos = tbUnos->Text;
      label1->Text = sUnos->String::Substring(1,2);

}

在构建并运行时,我的程序崩溃了。 请帮忙:)

【问题讨论】:

    标签: string visual-c++ substring


    【解决方案1】:

    首先这不是 C++,这是 C++/CLI,它是针对 CLI 的语言扩展。

    其次,我不明白当你这样做sUnos->String::Substring时你的程序是如何编译的。但是,您的代码应如下所示:

    String^ sUnos = tbUnos->Text;
    if(!String::IsNullOrEmpty(sUnos))
       label1->Text = sUnos->Substring(1,2);
    

    编辑:请注意,此代码位于TextChanged 事件的处理程序中。这意味着每次文本更改时都会调用它,就像每次按下键盘上的键一样。当您在文本框中键入第一个字母时,tbUnos->Text 将包含单个字符,Substring(1, 2) 将抛出,因为没有索引 1 开头。来自MSDN

    ArgumentOutOfRangeException

    startIndex 加上length 表示不在此实例中的位置。

    【讨论】:

    • 我这样做了,运行程序并开始在 tbUnos 中输入字母。它只让我输入一个字母,然后它就崩溃了。以下消息出现在我的屏幕上:mscorlib.dll 中出现“System.ArgumentOutOfRangeException”类型的未处理异常附加信息:索引和长度必须引用字符串中的位置。
    • 我明白了。我添加了一个在输入完成后单击的按钮。它奏效了,我及时完成了我的项目。谢谢!!!
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多