求助。access violation
#include<iostream>
using namespace std;
//将一个字符串插入到另一个字符串的指定位置处
void insert(char *str1, int pos, char *str2)
{
char tmp[100], *p1;
p1 = str1 + pos;
int i = 0;
while (p1 != '\0')
{
tmp[i++] = *p1++;
}//pos以后的字符复制到tmp[]
p1 = str1 + pos;
while (str2 != '\0')
{
*p1++ = *str2++;
}//复制str2到str1
for (int j = 0; j < i; j++){
*p1++ = tmp[j];
}//把tmp[]复制回来
*p1 = '\0';//最后加上'\0'
}
int main()
{
char a[8] = "c++java", b[5] = "haha";
insert(a, 3, b);
cout << "***********************************************************";
for (int i = 0; i < 15; i++){
cout << "a 是:" << a[i] << endl;
}
system("pause");
return 0;
}
[解决办法]
#include<iostream>
using namespace std;
//将一个字符串插入到另一个字符串的指定位置处
void insert(char *str1, int pos, char *str2)
{
char tmp[100], *p1;
p1 = str1 + pos;
int i = 0;
while (*p1 != '\0') //p1是个地址,对判断是否为'\0'应该用*p1
{
tmp[i++] = *p1++;
} //pos以后的字符复制到tmp[]
p1 = str1 + pos;
while (*str2 != '\0') //同上
{
*p1++ = *str2++;
} //复制str2到str1
for (int j = 0; j < i; j++){
*p1++ = tmp[j];
} //把tmp[]复制回来
*p1 = '\0'; //最后加上'\0'
}
int main()
{
char a[20] = "c++java", b[5] = "haha"; //a扩容
insert(a, 3, b);
cout << "***********************************************************"<<endl;
//for (int i = 0; i < 15; i++){ //有越界
for (int i = 0; i < strlen(a); i++){
cout << "a 是:" << a[i] << endl;
}
system("pause");
return 0;
}