【发布时间】:2020-06-28 14:50:03
【问题描述】:
我一直在将练习作为函数和它们的一些界面。目前我只做了一个练习,就是在一些更大的行中删除第一次出现的“我们”行。有一个人有同样的问题和类似的情况(strcpy causing Thread 1: signal SIGABRT),但我不是在使用函数 strcpy 时遇到错误,而是在我们返回 switch-case 构造之后,虽然这是必须连接的。
#include <iostream>
using namespace std;
void task1_C() {
const int N = 10;
char S[N];
char rem[3] = "we";
cout << "Input your line (should consist of 10 characters): ";
cin >> S;
char *p = strstr(S, rem);
if (p) {
strcpy(p, p + strlen(rem));
cout << S << endl;
}
}
void task1_Cpp() {
}
void task2_C() {
}
void task2_Cpp() {
}
void task3_C() {
}
void task3_Cpp() {
}
void task4_Cpp() {
}
void task5_Cpp() {
}
int main(){
int input;
cout << "Input 1-5 for C++ functions, 11-13 for C functions." << endl;
cin >> input;
switch(input){
case 1: task1_Cpp(); break;
case 2: task2_Cpp(); break;
case 3: task3_Cpp(); break;
case 4: task4_Cpp(); break;
case 5: task5_Cpp(); break;
case 11: task1_C(); break;
case 12: task2_C(); break;
case 13: task3_C(); break;
}
return 0;
}
输出:
Input 1-5 for C++ functions, 11-13 for C functions.
11
Input your line (should consist of 10 characters): sweweratwe
sweratwe
Program ended with exit code: 9
【问题讨论】:
-
大小为
10的缓冲区最多可容纳9个字符。 -
是的,它已连接。特定代码行上的错误并不意味着它总是会在那里崩溃。 C++ 不能以这种方式工作。该程序可能会继续运行一段时间,然后最终崩溃。
-
这也可能是内存重叠的问题(strcpy应该与不同的缓冲区一起使用AFAIK...否则你应该使用memmove)