【发布时间】:2014-11-17 07:08:20
【问题描述】:
我正在尝试读取文件,然后将文件中的 cmets 转换为大写。
这是我的代码:
char s[100];
void initstring();
void error(char);
void cap(char s[]);
void main(void)
{
initstring();
getchar();
}
void initstring()
{
FILE *fp;
fp = fopen("example.txt","r");
while(fgets(s,100,fp)!=NULL)
{
cap(s);
}
}
void cap(char s[])
{
cout << "its in";
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='/' && s[i+1]=='/')
{ int x=i;
do
{
s[x]=toupper(s[x]);
x++;
}while(s[x]!='\n');
break;
}
else if(s[i]=='/' && s[i+1]=='*')
{
int y=i;
do
{
s[y]=toupper(s[y]);
y++;
}while(s[y]!='/');
break;
}
}
cout << s;
}
它给了我关于 s 的警告,
warning C4018: '<' : signed/unsigned mismatch
fopen 报错
Error 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
其实这个程序最初是用 c 编写的,而我现在是用 c++ 编写的。
感谢您的帮助。
【问题讨论】:
-
这只是新版本 MSVC 的行为。将
#define _CRT_SECURE_NO_WARNINGS添加到文件的开头以继续使用不安全的功能。关于警告,那是因为strlen返回一个无符号整数,而不是一个有符号整数,所以你可以将int i变成unsigned int i以避免警告。 -
如果要切换到C++,请先编写C++程序。例如,使用 std::ifstream 代替 fopen。
-
谢谢@Govind 让我试试
-
谢谢@govindParmar 完成了。