使用C语言open函数带O_CREAT参数创建文件时文件名末尾多问号如何解决
问题原因
你遇到的文件名末尾自动追加?的异常,根源是输入字符串分割逻辑的分隔符设置错误:
- 你从终端读取的用户输入行末尾自带换行符
\n,但调用strtok时仅指定了空格" "作为分隔符,导致换行符没有被过滤,残留在command指向的文件名末尾 - 终端显示文件名时会把不可打印的
\n字符替换为?,所以看起来是文件名被自动追加了问号
解决方法
- 修改
strtok的分隔符参数,将换行符加入分隔符集合:
把原来的代码行
command = strtok(NULL, " ");
修改为
command = strtok(NULL, " \n");
修改后strtok会同时将空格、换行符作为分割边界,不会把换行符留在文件名中。
- (可选优化)增加空值校验逻辑,避免用户未输入文件名时程序触发空指针异常:
在调用open前增加判断:
if (command == NULL) { fprintf(stderr, "未指定输出文件名\n"); exit(1); }
- (可选优化)普通文本文件不需要执行权限,
open的权限参数可以从0700改为0644,更符合常规文件权限规范。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

