无法在 Linux 上使用 C++ 保存文本文件

Posted

技术标签:

【中文标题】无法在 Linux 上使用 C++ 保存文本文件【英文标题】:Can't save text file with C++ on Linux 【发布时间】:2012-09-06 20:05:17 【问题描述】:

我想我又遇到了那些指针问题。我创建了一个简单的函数,将 char 数组保存到指定的文件中。 这是我的全部代码

#include <stdio.h>
#include <string.h>

void Output(const char*, const char*, const char*);
void OutPutSomething();

// main.cpp --------------------------------------------------
int main(int argc, char** argv) 
    char Message[256];
    snprintf(Message, 256, "This message will be saved\n");
    Output("Output.txt", Message, "w");
    return 0;


void OutPutSomething() 
    Output("Output.txt", "This text will not be saved (???)\n", "w");


void Output(const char *FileName, const char *Text, const char *Mode) 
    FILE *OutputFIle;
    OutputFIle = fopen(FileName, Mode);
    if (OutputFIle != NULL) 
        printf(Text, "\n");
        fputs(Text, OutputFIle);
        fclose(OutputFIle);
     else 
        printf("Output function failed!");
    

所以,我的问题是这样的:当从主函数调用 Output() 函数时,函数可以正常工作 - 文本保存在文件中。然而,当我从OutPutSomething() 调用Output() 函数时,它不会正确地将文本保存到文件中(它只保存一个'\B0' 文本)。我看到printf() 在控制台中显示的文本,但文本没有保存。

可能是什么原因?谢谢!

更多: 我使用 Code::Blocks(GCC 编译器)并且该应用程序是一个控制台应用程序。没有链接库,没有添加其他标题。看到如此简单的事情不起作用,令人沮丧。

【问题讨论】:

你通常不应该在你的头文件中定义你的函数。标头通常仅声明函数签名,并且定义应位于 .cpp 文件中的其他位置,该文​​件可以独立编译然后链接到最终二进制文件中。 这是完整的代码吗? #include 似乎不见了。 这看起来不像 C++ 代码,更像是 C 代码。 在这里也可以工作,就像其他人一样。 也许您正在运行其他代码而不是此处显示的代码?例如,您可能正在使用一个名为“Main.h”的文件,但还有另一个名为“main.h”的旧版本,并且是实际使用的那个?或者您正在编辑一个名为“main.h”的文件,但在错误的目录中? 【参考方案1】:

您的代码在我的系统上运行良好。我同意其他人的观点,尽管您不应该将函数实现放在头文件中。

【讨论】:

也适用于我的系统。一定有其他问题,不是这里显示的代码的一部分。

以上是关于无法在 Linux 上使用 C++ 保存文本文件的主要内容,如果未能解决你的问题,请参考以下文章

Javascript将文本区域保存为UTF-8文件

如何在C++中 统计多行文本中的行数、单词数及字符数

在LINUX 下 使用PHP 修改文本文件

写一个Linux C程序,将一个文本文件中的所有小写字母转换为大写字母。

如何在处理西里尔文文本文件时提高 C++ 性能?

在 C++ 中计算文本文件中的文本行数时出错