【发布时间】:2014-12-02 20:44:55
【问题描述】:
我基本上是想在数组中某个索引之后存储所有内容。
例如,我想存储一个声明为char name[10] 的名称。如果用户输入 15 字符,它将忽略前五个字符并将其余字符存储在 char 数组中,但是,我的程序崩溃了。
这是我的代码
char name[10];
cout<< "Starting position:" << endl;
cin >> startPos;
for(int i= startPos; i< startPos+10; i++)
{
cout << i << endl; // THIS WORKS
cout << i-startPos << endl; // THIS WORKS
name[i-startPos] = name[i]; // THIS CRASHES
}
例如,如果我的名字是McStevesonse,我希望程序只存储第三个位置的所有内容,所以最终结果是Stevesonse
如果有人能帮我解决这个崩溃问题,我将不胜感激。
谢谢
【问题讨论】:
-
如果
name声明为name[10]和startPos > 0,则i将大于10,因此name[i]将访问超出分配的空间。您发布的代码在该上下文中不是很清楚,因为您用文字描述了一半,而不是在代码中。 -
如何将用户输入的15个字符存储到
char name[10]变量中?当你知道这个问题的答案时,你就会明白问题所在。不幸的是,您的程序的这一部分不在您的问题中,所以我无法回答这个问题。但是,我可以告诉你,不可能将 15 个字符存储到 10 个chars 的数组中而不会导致“未定义的行为”,这通常会在以后转化为崩溃。 -
您提供的代码似乎与您提出的问题无关。
If the user inputs in say 15 characters ...;我没有看到您的程序在任何地方询问用户名。请改写您的问题和/或添加MCVE。
标签: c++ arrays truncation strncpy