请高手帮我分析下下面这个程序,这个程序在VC6.0下可以正常运行,但在VS2005下就不正常。
这个程序是交换指定位置的字符串。#include<iostream>#include<string.h>#include<malloc.h>usingnamespaces...
这个程序是交换指定位置的字符串。
# include <iostream>
# include <string.h>
#include <malloc.h>
using namespace std;
void swap(char *src,int n,char *dst,int m);
char *temp_src;
char *temp_dst;
void main()
{
char *src = "teacher";
char *dst = "student";
cout<<"交换前:\n";
cout<<"src:\t"<<src<<endl;
cout<<"dst:\t"<<dst<<endl;
swap(src,3,dst,1);
cout<<"交换后:\n";
cout<<"src:\t"<<temp_src<<endl;
cout<<"dst:\t"<<temp_dst<<endl;
free(temp_src);
free(temp_dst);
getchar();
}
/*************************************************************
交换指定位置的字符串
n表示在src字符串中第n个字符开始和dst字符串中的第m个字符开始替换
**************************************************************/
void swap(char *src,int n,char *dst,int m)
{
int len,i,j;
i = n;
j = m;
int len_src = (int)strlen(src);
int len_dst = (int)strlen(dst);
/*
temp_src = (char *)malloc((n + len_dst - m)*sizeof(char));
temp_dst = (char *)malloc((m + len_src - n)*sizeof(char));*/
temp_src = (char *)malloc(9);
temp_dst = (char *)malloc(5);
for(len = 0;len < n;len++)
{
temp_src[len] = src[len];
}
for(len = 0;len < m;len++)
{
temp_dst[len] = dst[len];
}
for(len = m;len < len_dst;len++)
{
temp_src[i] = dst[len];
i++;
}
for(len = n;len < len_src;len++)
{
temp_dst[j] = src[len];
j++;
}
}
在VS2005下运行的结果如图所示,会出现乱码,VC6.0下就不会,这是为什么???? 展开
# include <iostream>
# include <string.h>
#include <malloc.h>
using namespace std;
void swap(char *src,int n,char *dst,int m);
char *temp_src;
char *temp_dst;
void main()
{
char *src = "teacher";
char *dst = "student";
cout<<"交换前:\n";
cout<<"src:\t"<<src<<endl;
cout<<"dst:\t"<<dst<<endl;
swap(src,3,dst,1);
cout<<"交换后:\n";
cout<<"src:\t"<<temp_src<<endl;
cout<<"dst:\t"<<temp_dst<<endl;
free(temp_src);
free(temp_dst);
getchar();
}
/*************************************************************
交换指定位置的字符串
n表示在src字符串中第n个字符开始和dst字符串中的第m个字符开始替换
**************************************************************/
void swap(char *src,int n,char *dst,int m)
{
int len,i,j;
i = n;
j = m;
int len_src = (int)strlen(src);
int len_dst = (int)strlen(dst);
/*
temp_src = (char *)malloc((n + len_dst - m)*sizeof(char));
temp_dst = (char *)malloc((m + len_src - n)*sizeof(char));*/
temp_src = (char *)malloc(9);
temp_dst = (char *)malloc(5);
for(len = 0;len < n;len++)
{
temp_src[len] = src[len];
}
for(len = 0;len < m;len++)
{
temp_dst[len] = dst[len];
}
for(len = m;len < len_dst;len++)
{
temp_src[i] = dst[len];
i++;
}
for(len = n;len < len_src;len++)
{
temp_dst[j] = src[len];
j++;
}
}
在VS2005下运行的结果如图所示,会出现乱码,VC6.0下就不会,这是为什么???? 展开
3个回答
2011-06-22
展开全部
for(len = 0;len < n;len++)
{
temp_src[len] = src[len];
}
temp_src[len] = 0;
for(len = 0;len < m;len++)
{
temp_dst[len] = dst[len];
}
temp_dst[len] = 0;
for(len = m;len < len_dst;len++)
{
temp_src[i] = dst[len];
i++;
}
temp_src[i] = 0;
for(len = n;len < len_src;len++)
{
temp_dst[j] = src[len];
j++;
}
temp_dst[j] = 0;
{
temp_src[len] = src[len];
}
temp_src[len] = 0;
for(len = 0;len < m;len++)
{
temp_dst[len] = dst[len];
}
temp_dst[len] = 0;
for(len = m;len < len_dst;len++)
{
temp_src[i] = dst[len];
i++;
}
temp_src[i] = 0;
for(len = n;len < len_src;len++)
{
temp_dst[j] = src[len];
j++;
}
temp_dst[j] = 0;
展开全部
temp_src = (char *)malloc(10);
temp_dst = (char *)malloc(6);
temp_src[9] = 0;
temp_dst [5] = 0;
你要多分配 一个字节,存放字串的结束符 \0
temp_dst = (char *)malloc(6);
temp_src[9] = 0;
temp_dst [5] = 0;
你要多分配 一个字节,存放字串的结束符 \0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
QQ微博一键登录取消后,性欲一小时,很多站长都后悔莫及,高弹力莱卡涂漆三点式,希望官方能够再开启一次,VIG-RX。恳请DZ给力啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询