这个C程序用VC的方法编写算正确吗?VC和tc的不同!

来源:百度知道 编辑:UC知道 时间:2024/06/18 07:40:13
举例说明:实现俩个字符串的连接。
用VC编写程序如下:
#include <stdio.h>
fun(char *p,char *q)
{int t;
while(*(p+t)!='\0')
t++;
{for(int i=0;*(q+i)!='\0';i++)
*(p+t+i)=*(q+i);
}
void main()
{char p[100]="friststring--";
char q[100]="secondstring";
fun(p,q);
printf("%s\n",p);
}
这个程序vc上输出的结果是”friststring--secondstring“
而在用TC2.0进行编译时会出错,只有将for循环中的int i=0;放到{后定义,而原来的for循环变为for(;*(q+i)!='\0';i++)才会得到最终的输出结果,那么请问考试的时候如果用的是VC的编译程序算正确么?
抱歉,因为是随手写的,匆忙中忘记定义t的初值了,应改为int t=0;在main主函数之前少加了一个},在此补充!!!

你写的for循环从语法上来看是属于C++的,TC2.0是C编译器,编译当然会有问题了

在C语言中是不能在for循环的表达式内定义变量的
必须是在for外定义
因此在for这个地方你用的是C++的语法

如果是VC下编译,你的源文件后缀为.cpp的时候能编译成功,如果你把你的源文件后缀改为.c再编译的话就无法编译了。
你可以尝试一下:打开VC6.0,File-New,选择Win32 Console Application,输入Project Name(任意),确定,然后选择默认的An Empty Project,点击Finish,然后File-New,选择C++ Source File,在File处输入文件名(任意),要注意加上后缀名.c,比如test.c;然后确定;然后把你的代码输进去,编译运行,看看错误提示吧!

如果还有不明白的地方,可以给我发消息

P.S:你给的程序有问题,我稍微修改了一下:

#include <stdio.h>
fun(char *p,char *q)
{
int t=0;
/*int i; */ /*这是C++版本的,如果你按照我上面说的方法建立工程以及.c源文件的话,把这里取消屏蔽,并且把for循环的int i=改为i=0,看看两种情况有什么不一样*/
while(*(p+t)!='\0') t++;

for(int i=0;*(q+i)!='\0';i++)
*(p+t+i)=*(q+i);
}
void main()
{
char p[100]="friststring--";
char q[100]="secondstring";
fun(p,q);
printf("%s\n",p);
}

在标准C++中,for中定义的循环变量的作用域是从定义到for循环结束。