您是否有任何理由(语法除外)
FILE *fdopen(int fd, const char *mode);
Run Code Online (Sandbox Code Playgroud)
要么
FILE *fopen(const char *path, const char *mode);
Run Code Online (Sandbox Code Playgroud)
代替
int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
在Linux环境中使用C时?
如何计算文件的大小(以字节为单位)?
#include <stdio.h>
unsigned int fsize(char* file){
//what goes here?
}
Run Code Online (Sandbox Code Playgroud) 我在unsigned char变量中有二进制数据.我需要将它们转换为c中的PEM base64.我查看了openssl库,但我找不到任何功能.有没有人有任何想法?
让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).
我正在处理我希望在处理它们时读入缓冲区的小文本文件,所以我想出了以下代码:
...
char source[1000000];
FILE *fp = fopen("TheFile.txt", "r");
if(fp != NULL)
{
while((symbol = getc(fp)) != EOF)
{
strcat(source, &symbol);
}
fclose(fp);
}
...
Run Code Online (Sandbox Code Playgroud)
这是将文件内容放入缓冲区还是滥用的正确方法strcat()?
然后我遍历缓冲区:
for(int x = 0; (c = source[x]) != '\0'; x++)
{
//Process chars
}
Run Code Online (Sandbox Code Playgroud) 我试图解析一个简单的CSV文件,其格式如下:
20.5,20.5,20.5,0.794145,4.05286,0.792519,1
20.5,30.5,20.5,0.753669,3.91888,0.749897,1
20.5,40.5,20.5,0.701055,3.80348,0.695326,1
Run Code Online (Sandbox Code Playgroud)
所以,一个非常简单和固定的格式文件.我将这些数据的每一列存储到STL向量中.因此我尝试使用标准库保持C++方式,并且我在循环中的实现看起来像:
string field;
getline(file,line);
stringstream ssline(line);
getline( ssline, field, ',' );
stringstream fs1(field);
fs1 >> cent_x.at(n);
getline( ssline, field, ',' );
stringstream fs2(field);
fs2 >> cent_y.at(n);
getline( ssline, field, ',' );
stringstream fs3(field);
fs3 >> cent_z.at(n);
getline( ssline, field, ',' );
stringstream fs4(field);
fs4 >> u.at(n);
getline( ssline, field, ',' );
stringstream fs5(field);
fs5 >> v.at(n);
getline( ssline, field, ',' );
stringstream fs6(field);
fs6 >> w.at(n);
Run Code Online (Sandbox Code Playgroud)
问题是,这非常慢(每个数据文件有超过100万行),在我看来有点不优雅.有没有更快的方法使用标准库,或者我应该只使用stdio函数?在我看来,整个代码块将减少为单个fscanf调用.
提前致谢!
如何在CUnit中为打印到stdout的函数编写测试,以验证其输出?
要测试的示例函数:
void print()
{
printf("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
它的单元测试应该以某种方式验证"Hello world"是否已打印到控制台:
void test_print()
{
// how to assert?
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
我对stat.h有一个非常奇怪的问题
在我的代码的顶部,我有声明:
#include <sys\types.h>
#include <sys\stat.h>
Run Code Online (Sandbox Code Playgroud)
和功能原型:
int FileSize(string szFileName);
Run Code Online (Sandbox Code Playgroud)
最后,函数本身定义如下:
int FileSize(string szFileName)
{
struct stat fileStat;
int err = stat( szFileName.c_str(), &fileStat );
if (0 != err) return 0;
return fileStat.st_size;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我收到错误:
divide.cpp: In function 'int FileSize(std::string)':
divide.cpp:216: error: aggregate 'stat fileStat' has incomplete type and cannot be defined
divide.cpp:217: error: invalid use of incomplete type 'struct stat'
divide.cpp:216: error: forward declaration of 'struct stat'
Run Code Online (Sandbox Code Playgroud)
从这个线程:我怎样才能在C中获得文件的大小? 我认为这段代码应该可行,我无法弄清楚为什么它不能编译.谁能发现我做错了什么?
C2x,7.21.9.2 fseek 函数:
概要
Run Code Online (Sandbox Code Playgroud)#include <stdio.h> int fseek(FILE *stream, long int offset, int whence);
为什么fseek有long int offset而不是long long int offset?
似乎在具有数据模型LLP64 或 ILP32 的操作系统(例如 Microsoft Windows)上2147483647(2 GB)可能不够。