2012-03-03 32 views
1

只是一个语法问题,这里是我的代码片段。 (对不起,浏览器是不是让我正确粘贴到堆栈溢出。)将字符串文字传递给'char *'函数并得到编译器警告

#include <iostream>  /* 'iostream.h' is deprecated. */ 
#include <cstring> 
#include <cstdlib> 
#include <cstdio> 

using namespace std; /* Required. */ 

FILE *OpenFile(char *Filename) 
{ 
     FILE *FP; 

     if((FP = fopen(Filename, "r")) == NULL) 
     {  /* Error opening file. */ 
       std::cout << "[!!] Unable to open database!" 
          << " Are you sure it exists?\n" 
          << "[<<] Database Unchanged.\n"; 
       exit(EXIT_FAILURE);  /* End program. */ 
     } 

     else /* Properly opened the file. */ 
       return FP; 
} 

int main(void) 
{ 
     FILE *Data;  /* Our database file pointer. */ 
     Data = OpenFile("Data.txt"); 
     printf("Success!\n"); 
     return 0; 
} 

当我编译,我得到以下警告:

$ g++ test.cpp -o test 
test.cpp: In function ‘int main()’: 
test.cpp:27:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
$ 

我要去哪里错了?在C++

+1

请在此处贴你的代码。不要让我们访问外部网站来查看您的代码。 – 2012-03-03 04:22:16

+0

我知道,firefox对我来说一直很奇怪,试图找出原因。 – 2012-03-03 04:24:34

+0

报告'cerr'上的错误;这就是它的设计目的。理论上讲,使用'FILE * Data = OpenFile(“data.txt”);'并在退出之前关闭文件是一个好主意。实际上,在这种情况下,这并不重要,但在许多情况下,不释放分配的资源是一个坏主意,RAII(资源获取初始化)建议初始化定义符号。 – 2012-03-03 04:32:59

回答

11

字符串文字类型的(其中Ñ是字符的字符串中的数字,包括终止NUL)“的Ñconst char阵列”。用这种方式声明你的功能:

FILE *OpenFile(const char *Filename) 
相关问题