我收到错误消息:
Homework6_10_7.exe中0x5AAF40D9(msvcr120d.dll)的未处理异常:> 0xC0000005:访问冲突写入位置0x006A0000。
运行此代码时:
int main()
{
//variables
const int SIZE = 30;
char first[SIZE];
char middle[SIZE];
char last[SIZE];
char full[100];
const char comma[2] = { ',', '\0'};
const char space[2] = { ' ', '\0' };
int length = 0;
//Get the user names
cout << "Enter your first name: ";
cin.getline(first, 30);
cout << "Enter your middle name: ";
cin.getline(middle, 30);
cout << "Enter your last name: ";
cin.getline(last, 30);
//Puts the given name values into the full desired format,
strcat(full, last);
strcat(full, comma);
strcat(full, space);
strcat(full, first);
strcat(full, space);
strcat(full, middle);
//outputs the full name array.
cout << "Welcome new user " << full << endl;
system("PAUSE");
return 0;
}
有什么东西我不见了吗? strcat似乎导致了这个问题,但我不确定为什么。 任何帮助表示感谢,谢谢。
答案 0 :(得分:2)
strcat
将源字符串的副本附加到目标字符串。目标中的终止空字符被源的第一个字符覆盖,并且在由目标中的两个串联形成的新字符串的末尾包含空字符。
但是你并不确定 终止空字符,因为你没有对full
进行零初始化:
char full[100] = {};
无论如何,你应该使用std::string
。
答案 1 :(得分:1)
打印完整字符串时,字符串的最后一个字符不为空,这就是问题所在 尝试在追加到像这样的完整字符串之前添加它
for (int i = 0; i < 100; i++)
full[i] = '\0';
或者您可以简单地执行此操作
char full[100] = {};