用VC++2010和VC++2017编写程序差别大吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VC++2010和VC++2017编写程序差别大吗相关的知识,希望对你有一定的参考价值。

真的差别不大,c++已经是微软不待见的了,感觉没啥不一样。 参考技术A 1、新建项目。。

2、在左边的语言栏中选择C++,如果是平时学习用的的控制台程序就是 Win32—控制台应用程序。。

3、在接下来的应用程序向导附加选项选“空项目”。。

4、完成之后,在右边的“资源管理器”中的“源文件”右击,然后选择“新建项”。。

5、在新建项中选择C++文件,OK。。

VC与GCC代码编译差别

Manacher算法,实现最长回文字符串检测的算法。算法实现在Gcc编译环境下运行出现错误,但是在VC环境下运行正常。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void PrintString(char* s);
char* longestPalindrome(char* s) {
    int index_s=0,index_f=1;
    int id=1,mx=0;
    int str_len = strlen(s);
    int* pos_table = (int*)malloc(str_len*2+3);
    char* full_str = (char*)malloc(str_len*2+3);/* abc --> $#a#b#c#‘0‘ */

    printf("strlen = %d\\n",str_len);
    *(full_str) = $;
    while(*(s+index_s) != \\0){
        *(full_str+index_f) = #;
        index_f++;
        *(full_str+index_f) = *(s+index_s);
        index_f++;
        index_s++;
    }
    *(full_str+index_f) = #;
    *(full_str+index_f+1) = \\0;
    printf("full string is ");PrintString(full_str);
    str_len = strlen(full_str);
    printf("sizeof new string is %d\\n",str_len);
    *(pos_table) = 1;
    for (index_f = 1; index_f < str_len; index_f++){
        printf("index_f=%d,mx=%d,id=%d\\n",index_f,mx,id);
        if (index_f < mx){
            if (*(pos_table+2*id-index_f) < (mx-index_f)){
                *(pos_table+index_f) = *(pos_table+2*id-index_f);
                continue;
            } else {
                *(pos_table+index_f) = *(pos_table+2*id-index_f);
                for (index_s = mx+1; index_s < str_len; index_s++){
                    printf("index_s=%d",index_s);
                    if (*(full_str+index_f+index_s) == (*(full_str+index_f-index_s))){
                        *(pos_table+index_f) += 1;
                    }else{
                        break;
                    }
                }
                id = index_f;
                mx = index_f+index_s-1;
                continue;
            }
        } else {
            *(pos_table+index_f) = 1;
            for (index_s = 1; index_s < str_len; index_s++){
          // 以下四句打印输出均不正常,类似于新开辟的字符串缓冲区被破坏了一样。 printf(
"\\tindex_f=%d,index_s=%d,full_str=%d \\n",index_f,index_s,(int)full_str); printf("\\tfull_str[i]=%c, \\t",*(full_str+index_f+index_s)); printf("\\tfull_str[-i]=%c \\n",*(full_str+index_f-index_s));

 

printf("full string is ");PrintString(full_str);

                if (*(full_str+index_f+index_s) == (*(full_str+index_f-index_s))){
                    *(pos_table+index_f) += 1;
                }else{
                    break;
                }
            }
            id = index_f;
            mx = index_f+index_s-1;
        }
        continue;
    }
    for (index_f = 0; index_f < str_len; index_f++){
        printf("%d",*(pos_table+index_f));
    }
    printf("\\n");
    return full_str;
}

void PrintString(char* s)
{
    int index=0;
    while(*(s+index) != \\0){
        printf("%c",*(s+index));
        index++;
    }
    printf("\\n");
}

int main(void)
{
    char* s="aba";
    char* result;

    result = longestPalindrome(s);
    printf("This is question No.5 \\n");
}

出错的情形如下图所示:

 

技术分享 技术分享

 

 Gcc环境下出错的情形  VC环境下正常的情形

以上是关于用VC++2010和VC++2017编写程序差别大吗的主要内容,如果未能解决你的问题,请参考以下文章

vc++6.0和VC2017区别

VC++2010中文版如何编写并运行C语言程序?

由VC2010与VC2017数据结构差异造成的程序错误

急急急 求大神帮忙 用vc++ 生成1024位大素数 用到米勒拉宾素性测试

vs2015和vc6.0的区别

安装鲁班大师2022土建vc++错误