刚接触C看了 [课后作业] S1E2:第一个程序 【完全复制,也无法运行】
本帖最后由 益脑三通 于 2018-10-18 19:59 编辑本人是0基础啊,勿喷,根据小鱼要求的 第一课 抄一遍 第一个程序【计算代码量的程序】
抄完了 运行报错:
1>main.c
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(22): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(208): note: 参见“fopen”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(46): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(47): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(50): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(63): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(64): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明
1>c:\users\ipiqi\source\repos\c_course1\c_course1\main.c(76): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>f:\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明
1>已完成生成项目“C_Course1.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
一开始以为是自己抄错了 特意对了一遍 发现 没问题 !
然后复制了一份网页原文去VS2017上面 运行也发生了同意的报错!
求解啊 或者有没有 遇到同样问题的 同学们呢!
本人是 Windows10系统,开发环境:VS2017
我的代码如下:
#include <io.h>
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 256
long total;
int countLines(const char *filename);
void findAllCodes(const char *path);
//void findAllFfiles(const char *path);
int countLines(const char *filename)
{
FILE *fp;
int count = 0;
int temp = 0;
if ((fp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "Can not open the file:%s <=> 无法打开这个文件:%s\n", filename, filename);
return 0;
}
while ((temp = fgetc(fp)) != EOF)
{
if (temp == '\n')
{
count++;
}
}
fclose(fp);
return count;
}
void findAllCodes(const char *path)
{
struct _finddata_t fa;
long handle;
char thePath, target;
strcpy(thePath, path);
if ((handle = _findfirst(strcat(thePath, "/*.c"), &fa)) == -1L)
{
do {
sprintf(target, "%s/%s", path, fa.name);
total += countLines(target);
} while (_findnext(handle, &fa) == 0);
}
_findclose(handle);
}
void findALLDirs(const char *path)
{
struct _finddata_t fa;
long handle;
char thePath;
strcpy(thePath, path);
if ((handle = _findfirst(strcat(thePath, "/*"), &fa)) == -1L)
{
fprintf(stderr, "The path %s is wrong! <=> 这个路径 %s 是错误的!\n", path, path);
return;
}
do {
if (!strcmp(fa.name, ".") || !strcmp(fa.name, ".."))
continue;
if (fa.attrib == _A_SUBDIR)
{
sprintf(thePath, "%s/%s", path, fa.name);
findAllCodes(thePath);
findALLDirs(thePath);
}
} while (_findnext(handle, &fa) == 0);
_findclose(handle);
}
int main()
{
char path = ".";
printf("计算中...\n");
findAllCodes(path);
findALLDirs(path);
printf("目前你总共写了 %ld 行代码!\n\n", total);
system("pause");
return 0;
} 你建立的项目 --> Windows 桌面 >> Windows 桌面导向 >> 控制台应用程序
空项目(打勾),安全……(取消)
你这一句对??void findALLDirs(const char *path)
{
……
strcpy(thePath, path);
if ((handle = _findfirst(strcht(thePath, "/*"), &fa)) == -1L)//strcht #include<stdio.h>
#include<direct.h>
#include<io.h>
#include<stdlib.h>
#include<string.h>
#define MAX 256
long total;
int countLines(const char *filename);
void findAllCodes(const char *path);
void findALLFiles(const char *path);
int countLines(const char *filename)
{
FILE *fp;
int count = 0;
int temp;
if((fp = fopen(filename,"r")) == NULL)
{
fprintf(stderr,"Can not open the file:%s\n", filename);
return 0;
}
while((temp = fgetc(fp)) != EOF)
{
if(temp == '\n')
{
count++;
}
}
fclose(fp);
return count;
}
void findAllCodes(const char *path)
{
struct _finddata_t fa;
long handle;
char thePath, target;
strcpy(thePath,path);
if((handle = _findfirst(strcat(thePath,"/*.c"), &fa)) != -1L)
{
do
{
sprintf(target,"%s/%s", path, fa.name);
total += countLines(target);
}while(_findnext(handle,&fa) == 0);
}
_findclose(handle);
}
void findALLDirs(const char *path)
{
struct _finddata_t fa;
long handle;
char thePath;
strcpy(thePath,path);
if((handle = _findfirst(strcat(thePath,"/*"), &fa)) == -1L)
{
fprintf(stderr, "The path %s is wrong!\n", path);
return;
}
do
{
if( !strcmp(fa.name,".") || !strcmp(fa.name,"..") )
continue;
if(fa.attrib == _A_SUBDIR)
{
sprintf(thePath,"%s/%s", path, fa.name);
findAllCodes(thePath);
findALLDirs(thePath);
}
}while(_findnext(handle, &fa) == 0);
_findclose(handle);
}
int main()
{
char path=".";
printf("计算中...\n");
findAllCodes(path);
findALLDirs(path);
printf("目前你总共写了 %ld 行代码!\n\b", total);
system("pause");
return 0;
} claws0n 发表于 2018-10-18 20:32
感谢 这个复制了就可以了 我会重新再抄一遍的
虽然这个问题很简单 但是 我真是 一个字一个字 抄过来的 应该是抄错某字了吧 益脑三通 发表于 2018-10-18 22:13
感谢 这个复制了就可以了 我会重新再抄一遍的
虽然这个问题很简单 但是 我真是 一个字一个字 抄过来的...
{:5_106:}一字一句的抄也是一种学习
嗯我给的, 60 行,strcat
不过你也是换项目属性了吧?不然是报错累累的 claws0n 发表于 2018-10-18 22:17
一字一句的抄也是一种学习
嗯我给的, 60 行,strcat
不过你也是换项目属性了吧?不然是报错 ...
对的应该是安全检查 益脑三通 发表于 2018-10-19 09:17
对的应该是安全检查
嗯,从报错变成警告而已,忽略就好 安全检查导致的,加一句宏就可以了
#define _CRT_SECURE_NO_WARNINGS 回访三生 发表于 2018-10-20 19:00
安全检查导致的,加一句宏就可以了
#define _CRT_SECURE_NO_WARNINGS
感谢 为什么我怎么搞都是0行啊
小甲鱼的是0行
用你们的也是0行{:10_266:} 凉月流沐 发表于 2019-11-8 10:40
为什么我怎么搞都是0行啊
小甲鱼的是0行
用你们的也是0行
我还以为就我以个人是这样
我运行也是零行
我windows的运行109行{:10_266:}
页:
[1]