风过无痕1989 发表于 2020-9-20 00:17:13

不同编译器不同结果

写了一个函数,将两字符串连接,要求用指针实现,程序如下,可是此程序在 VC++6.0 编译正常,运行结果正常,但最后有错;在 DEV_C++ 中编译运行则完全正常。问题来了:是什么情况引起的 VC++6.0 运行最后出错,如何改进,避免类似的情况再次发生。

// 写一个函数,将两个字符串连接
#include <stdio.h>
#include <string.h>

void connect(char *p1,char *p2);

int main()
{
    char str1[] = "abcdefghijklm";
        char str2[] = "nopqrstuvwxyz";
        char *p1,*p2;
        p1 = str1;
        p2 = str2;
    connect(p1,p2);
        printf("\n");
}

void connect(char *p1,char *p2)
{
    int i,len1,len2;
        len1 = strlen(p1);
        len2 = strlen(p2);
        for (i = 0;i < len2;i++)
        {
          *(p1 + len1 + i) = *(p2 + i);
        }
        printf("%s\n",p1);
}


https://xxx.ilovefishc.com/album/202009/19/234606zyfzkuzou2y7ikq4.jpg

乐乐学编程 发表于 2020-9-20 00:17:14

这可能是 VC++6.0 不完全支持不定长数组的原因,我试了一下将第一个数组定义为固定长度数组,最后的内存不可读消息框就消失了

char str1 = "abcdefghijklm";
char str2[] = "nopqrstuvwxyz";

风过无痕1989 发表于 2020-9-20 12:56:51

乐乐学编程 发表于 2020-9-20 10:42
这可能是 VC++6.0 不完全支持不定长数组的原因,我试了一下将第一个数组定义为固定长度数组,最后的内存不 ...

还真是这么个问题,谢谢啦!

巴巴鲁 发表于 2020-9-20 15:02:16

变长数组VC应该不支持吧,c99的特性不是所有编译器都能完全支持的
像VC不支持变长数组,估计也不能对数组特定某一元素初始化(没试过),但dev是支持的
像dev,不能支持for(int i = 0; i < 10; i++)这种写法,不知道VC支持不?
只能说不同编译器对c99的接受程度不一样

风过无痕1989 发表于 2020-9-20 16:34:38

巴巴鲁 发表于 2020-9-20 15:02
变长数组VC应该不支持吧,c99的特性不是所有编译器都能完全支持的
像VC不支持变长数组,估计也不能对数组 ...

for(int i = 0; i < 10; i++)这种写法,VC++6.0 也不支持,出现一处,7个报错
页: [1]
查看完整版本: 不同编译器不同结果