最有可能的罪犯是您的Turbo C,一种古老的编译器。它技术上是一个DOS编译器,而不是Windows。这将限制它的RunTme库使用8.3字符的文件名。升级到更新的东西- Turbo C++似乎是一个合理的接班人,但微软的VC++ Express同样适用。
I翻译成中文:am翻译成中文:working翻译成中文:on翻译成中文:TTCN-3翻译成中文:(Testing翻译成中文:and翻译成中文:Test翻译成中文:Control翻译成中文:Notation)翻译成中文:scripting翻译成中文:language.翻译成中文:I翻译成中文:wanted翻译成中文:to翻译成中文:prepare翻译成中文:on翻译成中文:guideline翻译成中文:checker翻译成中文:for翻译成中文:this翻译成中文:code翻译成中文:files.翻译成中文:
为此,我希望逐行读取TTCN-3脚本文件(类似于file.ttcn)到一个缓冲区中。但是,对于我来说,fopen/sopen/open/fgetc/fscanf无法正常工作,也无法正确读取文件。它返回NULL。有没有办法将字符读取到缓冲区中。我认为C语言不能读取具有三个以上扩展名(如.ttcn)的文件。如果我的假设是错误的,请原谅我。
My翻译成中文:Environment翻译成中文:is翻译成中文:Turbo翻译成中文:C翻译成中文:on翻译成中文:windows.
Edit:
Yes翻译成中文:I翻译成中文:checked翻译成中文:those翻译成中文:errors翻译成中文:also翻译成中文:but翻译成中文:they翻译成中文:are翻译成中文:giving翻译成中文:unknown翻译成中文:error翻译成中文:for翻译成中文:read() and翻译成中文:no翻译成中文:such翻译成中文:file翻译成中文:or翻译成中文:directory翻译成中文:exists.
My翻译成中文:code翻译成中文:is翻译成中文:as翻译成中文:follows
翻译成中文:
#include翻译成中文:<errno.h>
翻译成中文:#include翻译成中文:<io.h>
翻译成中文:#include翻译成中文:<fcntl.h>
翻译成中文:#include翻译成中文:<sysstat.h>
翻译成中文:#include翻译成中文:<process.h>
翻译成中文:#include翻译成中文:<share.h>
翻译成中文:#include翻译成中文:<stdio.h>
翻译成中文:int翻译成中文:main(void)
翻译成中文:{
翻译成中文:翻译成中文:翻译成中文:翻译成中文:int翻译成中文:handle;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:int翻译成中文:status;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:int翻译成中文:i=0;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:char翻译成中文:ch;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:FILE翻译成中文:*fp;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:char翻译成中文:*buffer;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:char翻译成中文:*buf;
翻译成中文:翻译成中文:翻译成中文:翻译成中文:clrscr();
翻译成中文:翻译成中文:翻译成中文:翻译成中文:handle翻译成中文:=翻译成中文:sopen("c:\tc\bin\hi.ttcn",翻译成中文:O_BINARY,翻译成中文:SH_DENYNONE,翻译成中文:S_IREAD);翻译成中文:
/here翻译成中文:even翻译成中文:I翻译成中文:used翻译成中文:O_TEXT翻译成中文:and翻译成中文:others/
翻译成中文:翻译成中文:翻译成中文:翻译成中文:if翻译成中文:(!handle)
翻译成中文:翻译成中文:翻译成中文:翻译成中文:{
翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:printf("sopen翻译成中文:failed
");
翻译成中文:翻译成中文:翻译成中文://翻译成中文:翻译成中文:翻译成中文:翻译成中文:exit(1);
翻译成中文:翻译成中文:翻译成中文:翻译成中文:}
翻译成中文:翻译成中文:翻译成中文:printf("
Obtained翻译成中文:string翻译成中文:%s翻译成中文:@",buf);
翻译成中文:翻译成中文:翻译成中文:翻译成中文:close(handle);
翻译成中文:翻译成中文:翻译成中文:翻译成中文:fp=fopen("c:\tc\bin\hi.ttcn","r");翻译成中文:翻译成中文:\sorry翻译成中文:for翻译成中文:the翻译成中文:old翻译成中文:version翻译成中文:of翻译成中文:one翻译成中文:slash
翻译成中文:翻译成中文:翻译成中文:if(fp==NULL)翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:\I翻译成中文:was翻译成中文:doing翻译成中文:it翻译成中文:with翻译成中文:argv[1]翻译成中文:for翻译成中文:opening翻译成中文:
翻译成中文:翻译成中文:翻译成中文:{翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:\user翻译成中文:given翻译成中文:file翻译成中文:name翻译成中文:
翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:printf("
Cannot翻译成中文:open翻译成中文:file");
翻译成中文:翻译成中文:翻译成中文:}
翻译成中文:翻译成中文:翻译成中文:翻译成中文:ch=fgetc(fp);
翻译成中文:翻译成中文:翻译成中文:i=0;
翻译成中文:翻译成中文:翻译成中文:while(i<10)
翻译成中文:翻译成中文:翻译成中文:{
翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:printf("
character翻译成中文:is翻译成中文:%c翻译成中文:翻译成中文:%d",ch,ch);
翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:i++;翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文://Here翻译成中文:I翻译成中文:wanted翻译成中文:to翻译成中文:take翻译成中文:characters翻译成中文:into翻译成中文:
翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:ch=fgetc(fp);翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文:翻译成中文://buffer翻译成中文:翻译成中文:翻译成中文:
翻译成中文:翻译成中文:翻译成中文:}
翻译成中文:翻译成中文:翻译成中文:getch();
翻译成中文:翻译成中文:翻译成中文:return翻译成中文:0;
}
翻译成中文:翻译成中文:翻译成中文:翻译成中文:你的假设关于扩展名是错误的。如果fopen返回NULL,您应该输出strerror(errno)的结果或使用perror()函数查看失败的原因。
编辑:问题可能是因为你有一个"c: cinhi.ttcn"。在C中,“ ”被解释为制表符,例如。
你可以做到。
"c:\tc\bin\hi.ttcn"
但这样非常丑陋,你的系统应该接受:
"c:/tc/bin/hi.ttcn"
MS-DOS不认识长文件名,包括文件扩展名超过3个字符的文件。因此,Turbo C提供的CRT很可能不会寻找您提供的名称,而是截断的名称或其他名称。
Windows方便地为它们提供了一个短名称(即匹配8.3格式,大多数情况下以~1结尾,除非您玩具有相同8个字符前缀的文件); 发现它的一种方法是打开控制台窗口并在存储文件的文件夹中运行“dir / x”。
找到与您的文件相关联的短名称并补丁到您的C源代码文件中。
编辑:该死,下次我会看评论的。所有荣誉归 j_random_hacker。
现在您已经发布了代码,另一个问题浮现出来。
下面这一行:
fp=fopen("c: cinhi.ttcn","r");
应该阅读为:
fp=fopen("c:\tc\bin\hi.ttcn","r");
In C strings, the backslash () is an escape character that is used to encode special characters (e.g.
represents a newline character,
a tab character). To actually use a literal backslash, you need to double it. As it stands, the compiler is actually trying to open a file named "C:<tab>c<backspace>inhi.ttcn"
-- needless to say, no such file exists!
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding