为什么同一程序 运行的结果不用?

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:30:45
为了什么同一程序在TC 和VC++里运行的结果不同呢???????????

如下程序:

#include "stdio.h"
#include "string.h"
StrCat(char *str1,char *str2)
{
char *str3;
str3=str1;
str1+=strlen(str1);
while(*str1++=*str2++)
;
return(str3);
}
main()
{
char *str1,*str2;
printf("Please input str1 and str2 : \n");
scanf("%s%s",str1,str2);
printf("%s\n",StrCat(str1,str2));
}

在TC中是正确的,在VC++中确实是错的。。。郁闷哦

晕。
无论在哪儿你这个程序都应该挂掉。
1.暂且不论语法上的错误。
2.逻辑上的错误。:char *str1,*str2; 它们两个内存都没分配你往哪儿输入啊?

3.VC下面执行C++检查。。你最好是把返回值加上:
#include "stdio.h"
#include "string.h"
char* StrCat(char *str1,char *str2)
{
char *str3;
str3=str1;
str1+=strlen(str1);
while(*str1++=*str2++)
;
return(str3);
}
void main()
{
char str1[100],str2[100];
printf("Please input str1 and str2 : \n");
scanf("%s%s",str1,str2);
printf("%s\n",StrCat(str1,str2));
}

你的代码有这几个问题:
1.
char *str1,*str2;
这样的声明,是不能scanf("%s%s",str1,str2)这么赋值的,
因为只声明了两个字符指针,并没有一块初始化的内存空间,
所以用str1,str2来存放两个字符串是错误的。
可以这么改:
char str1[20]={NULL},str2[20]={NULL};

2.
StrCat(char *str1,char *str2)
这个函数没有声明返回值类型

3.
return(str3);
这样返回是危险的,
str3是StrCat内部定义的变量,其生命域只在StrCat内部,
一旦StrCat指