我正在尝试制作此代码,以便从文件中读取希腊字母并使用fscanf打印发出相同声音的英文字母。问题是我一直在分段错误。我错过了什么?
#include <stdio.h>
int main ()
{
char s[100];
int i;
FILE * myfile;
myfile = fopen("/home/angelos/Downloads/λεξικο2.txt", "r");
while( fscanf(myfile, "%s", s) == 1)
{
for (i=0 ; i<100 ; i++)
{
if ( s[i] == 'Α' )
{ printf("A") ; }
else
if ( s[i] == 'Β' )
{ printf("V") ; }
}
}
答案 0 :(得分:1)
您的代码存在3个严重问题。
1)您永远不会检查fopen
是否成功。
2)您可以阅读未初始化的签名数据。
3)您可能会溢出输入缓冲区
这三件事都可能导致您的程序失败。
尝试以下更改:
#include <stdio.h>
#include <string.h>
int main ()
{
char s[100];
int i;
FILE * myfile;
myfile = fopen("/home/angelos/Downloads/λεξικο2.txt", "r");
// Check that fopen went fine
if (!myfile)
{
printf("Failed to open file\n");
return 1;
}
while( fscanf(myfile, "%99s", s) == 1)
// ^^
// Never read more than 99 chars (i.e. 99 + a terminating null byte)
{
for (i=0 ; i<strlen(s) ; i++)
// ^^^^^^
// Only iterate over the valid chars
{
if ( s[i] == 'Α' )
{ printf("A") ; }
else
if ( s[i] == 'Β' )
{ printf("V") ; }
}
}