fopen没有在linux上工作,因为名字中包含德语字符的文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了fopen没有在linux上工作,因为名字中包含德语字符的文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1351字,纯文字阅读大概需要2分钟。
内容图文
![fopen没有在linux上工作,因为名字中包含德语字符的文件](/upload/InfoBanner/zyjiaocheng/966/07a0893caf794c1aa92313f3276b716c.jpg)
我在c中编写了一个代码,用于文件处理.文件名中包含一些德语字符.此代码在Windows上完美运行.但它不适用于Linux. fopen正在提供“无法打开文件”错误.
我检查了文件路径,文件存在那里.此外,我已阅读该文件夹的写入权限.
代码如下.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
const char *fileName = "/users/common/ha?lMünchen.txt";
FILE * pFile;
char errorMessage[256];
pFile = fopen (fileName,"r");
if (pFile != NULL)
{
fprintf (stdout,"fopen example",errorMessage);
fclose (pFile);
}
else
{
sprintf(errorMessage, "Could not open file %s", fileName);
fprintf(stdout, "%s\n", errorMessage);
}
return 1;
}
有什么输入吗?
解决方法:
在Linux上,您可以用.替换您的sprintf调用
snprintf (errorMessage, sizeof(errorMessage),
"Could not open file %s - %m", fileName);
(一般提示是为了避免sprintf,因为可能存在缓冲区溢出并且只使用snprintf)
如果要避免使用GLibc特定的%m格式说明符,并使用更多标准函数代码
snprintf (errorMessage, sizeof(errorMessage),
"Could not open file %s - %s",
fileName, strerror(errno));
并且不要忘记#include< errno.h>,并仔细阅读errno(3)手册页.
顺便说一句,你可以避免同时使用snprintf和printf以及代码
fprintf (stderr, "Cannot open file %s - %s\n",
fileName, strerror(errno));
(正如乔纳森提醒的那样,错误报告通常会发送给stderr)
然后再次运行您的程序.也许你有一个字符编码问题(在源文件或文件系统中).
你也可以在程序中使用strace(也许是ltrace)来理解它正在进行的实际系统调用.
内容总结
以上是互联网集市为您收集整理的fopen没有在linux上工作,因为名字中包含德语字符的文件全部内容,希望文章能够帮你解决fopen没有在linux上工作,因为名字中包含德语字符的文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。