相关疑难解决方法(0)

C fopen vs open

您是否有任何理由(语法除外)

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时?

c unix linux file-io fopen

201
推荐指数
8
解决办法
16万
查看次数

如何确定C中文件的大小?

如何计算文件的大小(以字节为单位)?

#include <stdio.h>

unsigned int fsize(char* file){
  //what goes here?
}
Run Code Online (Sandbox Code Playgroud)

c io file filesize

132
推荐指数
7
解决办法
12万
查看次数

我如何在C中进行base64编码(解码)?

我在unsigned char变量中有二进制数据.我需要将它们转换为c中的PEM base64.我查看了openssl库,但我找不到任何功能.有没有人有任何想法?

c base64

126
推荐指数
11
解决办法
27万
查看次数

如何在C++中获取文件大小?

让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).

c++ filesize

123
推荐指数
5
解决办法
24万
查看次数

在C中将文本文件读入缓冲区的正确方法?

我正在处理我希望在处理它们时读入缓冲区的小文本文件,所以我想出了以下代码:

...
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)

c buffer input

24
推荐指数
3
解决办法
8万
查看次数

如何在没有fseek和ftell的情况下获得ANSI C中的文件大小?

在寻找找到文件大小的方法时FILE*,我发现这篇文章反对它.相反,它似乎鼓励使用文件描述符和fstat.

但是我的印象是fstat,open文件描述符一般都不那么便携(经过一​​些搜索,我发现了这个效果).

有没有办法在ANSI C中获取文件的大小,同时保持与文章中的警告一致?

c size file filesize

13
推荐指数
2
解决办法
1万
查看次数

用C++实现快速,简单的CSV解析

我试图解析一个简单的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调用.

提前致谢!

c++ csv standard-library

9
推荐指数
1
解决办法
2万
查看次数

如何测试写入stdout的代码?

如何在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)

我该怎么办呢?

c cunit

7
推荐指数
1
解决办法
3672
查看次数

C++ stat.h不完整类型且无法定义

我对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中获得文件的大小? 我认为这段代码应该可行,我无法弄清楚为什么它不能编译.谁能发现我做错了什么?

c++ filesize stat incomplete-type

6
推荐指数
1
解决办法
8136
查看次数

为什么 fseek 有“long int offset”而不是“long long int offset”?

C2x,7.21.9.2 fseek 函数:

概要

#include <stdio.h>
int fseek(FILE *stream, long int offset, int whence);
Run Code Online (Sandbox Code Playgroud)

为什么fseeklong int offset而不是long long int offset

似乎在具有数据模型LLP64 或 ILP32 的操作系统(例如 Microsoft Windows)上2147483647(2 GB)可能不够。

注意:POSIX 的lseekoff_t offset,其中off_t没有非常严格的定义”。

c fseek language-lawyer long-integer c-standard-library

6
推荐指数
1
解决办法
543
查看次数