2 xuezha009 xuezha009 于 2018.02.03 22:25 提问

c 代码复制后出现问题 大一水平 求大佬们帮帮忙

https://www.jianshu.com/p/ba0282bb87a0 这个链接里的源代码 我在dev 等平台试了 都没问题 在vs2017跳出这个 请问 大佬们咋回事图片说明

9个回答

qq_37233607
qq_37233607   2018.02.03 22:33
已采纳

最好还是使用VS2013,VS2015的版本,问题不多,而且支持C++11.

xuezha009
xuezha009 早晚都得用vs2017 我还是想学学怎么用
4 个月之前 回复
caozhy
caozhy   Ds   Rxr 2018.02.03 22:50

如果你能编译,就和scanf能不能用无关。vc++ 2010+以上之所以不能用scanf是因为它是不安全的,所以在编译器限制了。如果这个限制存在,根本不能编译,不要说运行了。
你的输入是否有问题,或者这个程序有问题。你这个是内存越界。

tis120
tis120 ............
4 个月之前 回复
kaieika
kaieika 看看你的输入是否有问题
4 个月之前 回复
xuezha009
xuezha009 回复caozhy: 跟链接里的数据一模一样的 +1.23400E-03
4 个月之前 回复
caozhy
caozhy 回复xuezha009: 你的输入是什么
4 个月之前 回复
xuezha009
xuezha009 大佬帮帮我呗
4 个月之前 回复
xuezha009
xuezha009 我用的是scanf_s 我这个代码绝对没有问题 估计是我不会用scanf_s 大佬能不能加下我qq给我远程协助 改改 251525317
4 个月之前 回复
qq_40356824
qq_40356824   2018.02.03 22:51

目前vs2017还是没什么问题啊,看你截图代码在什么地方冲突了吧

xuezha009
xuezha009 回复xuezha009: 吗
4 个月之前 回复
xuezha009
xuezha009 回复xuezha009: 大佬你是用的 scanf_s
4 个月之前 回复
xuezha009
xuezha009 我用的是scanf_s 我这个代码绝对没有问题 估计是我不会用scanf_s 大佬能不能加下我qq给我远程协助 改改 251525317
4 个月之前 回复
qq_41563566
qq_41563566   2018.02.04 09:23

char line[10000], *p = line; //这一行,line还没有显式的初始化吧。
scanf("%[^E]E%d", line, &exponent); //输入数据时,line可能会重新分配地址,此时 *p并不一定会指向line

后续引用*p时会出现问题。 可能VS版本不一样,对局部变量的处理不同。简单加上static char line试下。

zl13895647970
zl13895647970   2018.02.04 14:26

VS默认和这个代码冲突了,你是不是在调试

qq_38646470
qq_38646470   2018.02.04 22:08

#define use _CRT_SECURE_NO_WARNINGS 1
把这句话放在代码最开始就好。

qq_37503115
qq_37503115   2018.02.10 17:45
 #include <stdio.h>
int main()
{
    int exponent;    /* the exponent part */
    char line[10000], *p = line;
    scanf("%[^E]E%d", line, &exponent);

    if(*p++ == '-') putchar('-');
    if(exponent >= 0)   /* print '.' later or add zeros in the end */
    {
        putchar(*p);
        for(p += 2; exponent; exponent--)    /* print the integer part */
            putchar(*p ? *p++ : '0');
        if(*p)                               /* there is still fraction part */
        {
            putchar('.');
            while(*p) 
                putchar(*p++);
        }
    }
    if(exponent < 0)    /* add exponent zeros in the beginning */
    {
        printf("0.");
        for(exponent++; exponent; exponent++)       /* add zeros */
            putchar('0');
        for(; *p; p++) if(*p != '.') putchar(*p);   /* the rest */
    }

    return 0;
}

我在dev和2010上跑都完美运行

qq_37233607
qq_37233607   2018.02.03 22:32

vs2017不能用scanf的把,你可以在#include 下面加入 #pragma warning (disable : 4996)

xuezha009
xuezha009 我用的是scanf_s 我这个代码绝对没有问题 估计是我不会用scanf_s 大佬能不能加下我qq给我远程协助 改改 251525317
4 个月之前 回复
qq_37233607
qq_37233607 回复xuezha009: 直接把scanf改为scanf_s即可.因为scanf不安全,所以在VS2013之后被禁用了把,会提示错误
4 个月之前 回复
xuezha009
xuezha009 怎么用scanf_s改呢
4 个月之前 回复
u010368556
u010368556   2018.02.03 22:44

http://download.csdn.net/download/u010368556/10238145
这是我用的vs2013专业版,你可以试试!

xuezha009
xuezha009 想用最新版的
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!