g++ errno_t 和 fopen_s Debian 8.1 Jessie 中的错误
g++ errno_t and fopen_s error in Debian 8.1 Jessie
我在 Windows 8.1,Visual Studio 2013 Express 中编写了一些代码。现在,我正在尝试传输 运行 我的 Beagle Bone Black 上的代码,它是 运行ning Debian 8.1 Jessie。这是我第一次使用 Linux,所以我遇到了一些问题。
#include <iostream>
#include <errno.h>
#include <stdio.h>
using namespace std;
int main()
{
FILE *cfPtr;
errno_t err;
if ((err = fopen_s(&cfPtr, "objects.txt", "a +")) != 0) // Check if we can reach the file
cout << "The file 'objects.txt' was not opened.\n";
else
fclose(cfPtr);
return 0;
}
我用以下代码编译这段代码:
g++ source.cpp -o source
但它给了我一些...未在此范围内声明的错误。
source.cpp: In function ‘int main()’:
source.cpp:10:4: error: ‘errno_t’ was not declared in this scope
source.cpp:10:12: error: expected ‘;’ before ‘err’
source.cpp:12:8: error: ‘err’ was not declared in this scope
source.cpp:12:50: error: ‘fopen_s’ was not declared in this scope
我明白了,Windows 的 *_s 函数,那么我该如何解决这个问题和 errno_t 问题?
谢谢。
如您所说,fopen_s 是 Microsoft Windows 对 C 标准库的特定扩展,您需要改用 fopen。
现在,errno_t 基本上只是一个 int,所以您 可以 使用 int 代替。
我建议这样做:
#include <iostream>
#include <stdio.h>
using namespace std; // bad
int main(){
FILE *cfPtr = fopen("objects.txt", "r");
if (cfPtr == NULL){
cout << "The file 'objects.txt' was not opened.\n";
} else {
cout << "Success!";
fclose(cfPtr);
}
return 0;
}
请注意,如果文件不存在,"a+" 将创建一个新文件,因此无论如何它在大多数情况下都可以使用。我决定改用 "r",因为如果文件不存在,这将失败——例如。
我在 Windows 8.1,Visual Studio 2013 Express 中编写了一些代码。现在,我正在尝试传输 运行 我的 Beagle Bone Black 上的代码,它是 运行ning Debian 8.1 Jessie。这是我第一次使用 Linux,所以我遇到了一些问题。
#include <iostream>
#include <errno.h>
#include <stdio.h>
using namespace std;
int main()
{
FILE *cfPtr;
errno_t err;
if ((err = fopen_s(&cfPtr, "objects.txt", "a +")) != 0) // Check if we can reach the file
cout << "The file 'objects.txt' was not opened.\n";
else
fclose(cfPtr);
return 0;
}
我用以下代码编译这段代码:
g++ source.cpp -o source
但它给了我一些...未在此范围内声明的错误。
source.cpp: In function ‘int main()’:
source.cpp:10:4: error: ‘errno_t’ was not declared in this scope
source.cpp:10:12: error: expected ‘;’ before ‘err’
source.cpp:12:8: error: ‘err’ was not declared in this scope
source.cpp:12:50: error: ‘fopen_s’ was not declared in this scope
我明白了,Windows 的 *_s 函数,那么我该如何解决这个问题和 errno_t 问题?
谢谢。
如您所说,fopen_s 是 Microsoft Windows 对 C 标准库的特定扩展,您需要改用 fopen。
现在,errno_t 基本上只是一个 int,所以您 可以 使用 int 代替。
我建议这样做:
#include <iostream>
#include <stdio.h>
using namespace std; // bad
int main(){
FILE *cfPtr = fopen("objects.txt", "r");
if (cfPtr == NULL){
cout << "The file 'objects.txt' was not opened.\n";
} else {
cout << "Success!";
fclose(cfPtr);
}
return 0;
}
请注意,如果文件不存在,"a+" 将创建一个新文件,因此无论如何它在大多数情况下都可以使用。我决定改用 "r",因为如果文件不存在,这将失败——例如。