我有以下代码,我试图打开一个文本文件.
char frd[32]="word-list.txt";
FILE *rd=fopen(frd,"rb");
if(!rd)
std::cout<<"Coudn't open file\t"<<frd;
Run Code Online (Sandbox Code Playgroud)
我正在使用vc 2010,该文件位于此项目的调试目录中.任何人都可以告诉我为什么它无法打开文件?
我已经包含了string.h但是当我尝试使用它时,如下所示我得到错误
#include<string.h>
std::string something;
Run Code Online (Sandbox Code Playgroud)
这里std会被标记,它会说**错误C2039:'string':不是'std'的成员**
但在我的程序的其他部分它工作,只在某些地方我确实得到这个错误
为什么第一个能够正确递增pbf_ [k]而第二个甚至不能(递增)一次?
unsigned pbf_[5] ={0};
bool m=0;
Run Code Online (Sandbox Code Playgroud)
代码1:
for(int k=0;k<5;k++)
{
if((m=(bit_table_[k][i][bit_index ] &bit_mask[bit]))==true)
pbf_[k]++;
}
Run Code Online (Sandbox Code Playgroud)
代码2:
for(int k=0;k<5;k++)
{
if((bit_table_[k][i][bit_index ] & bit_mask[bit])==true)
pbf_[k]++;
}
Run Code Online (Sandbox Code Playgroud) 有什么区别
char cur_byte=*((char *)(buf+i));
Run Code Online (Sandbox Code Playgroud)
和
char *b=(char *)(buf);
char cur_byte=*(b+i);
Run Code Online (Sandbox Code Playgroud)
假设:buf是指向void // void*buf的指针; 我在for循环中用作迭代器我在交流源代码中发现了这个代码(第一行),它生成了rabin指纹,并且由于VC2010 express将其报告为错误,我必须将其替换为后两行.我不确定它是否可以达到预期的目的.另外,如果有人能给我一个提示,在哪里可以获得用于内容定义的分块和指纹生成的C++源代码,我将不胜感激.
我在这里strtoll()遇到的主要问题是在VC 2010(error C3861: 'strtoll': identifier not found)中被标记为错误.如果我用它替换它会做同样的事情strtol()吗?
unsigned int get_uintval_from_arg(int argc, int index, char **argv,
unsigned int lower_bound, unsigned int upper_bound)
{
unsigned int return_val=0;
if (index + 1 <= argc - 1)
{
return_val=(unsigned int)strtoll(argv[index+1],NULL,10);
if (errno == EINVAL || errno== ERANGE)
{
fprintf(stderr, "Could not parse argument %s for switch %s!\n",
argv[index], argv[index+1]);
return 0;
}
}
// ....... I will post the remaining part of the code if necessary
.......
}
Run Code Online (Sandbox Code Playgroud) 我有这个数组
unsigned char bit_table_[10][100];
Run Code Online (Sandbox Code Playgroud)
用 0 填充它的正确方法是什么。我试过了
std::fill_n(bit_table_,sizeof(bit_table_),0x00);
Run Code Online (Sandbox Code Playgroud)
但 vc 2010 将其标记为错误。
当我尝试使用VC2010调试它时,此代码失败:
char frd[32]="word-list.txt";
FILE *rd=fopen(frd,"r");
if(rd==NULL)
{
std::cout<<"Coudn't open file\t"<<frd;
exit(1);
}
char readLine[100];
while(fgets(readLine, 100, rd) != NULL)
{
readLine[strlen(readLine) - 1] = '\0';
char *token = NULL;
token = strtok(readLine, " ,");
insert(readLine);
}
Run Code Online (Sandbox Code Playgroud)
调试结果
--------------------------- Microsoft Visual C++调试库-----------
调试断言失败!
程序:...\documents\visual studio 2010\Projects\bfa\Debug\bfa.exe文件:f:\ dd\vctools\crt_bld\self_x86\crt\src\fgets.c行:57
表达式:(str!= NULL)
有关程序如何导致断言失败的信息,请参阅有关断言的Visual C++文档.
(按"重试"调试应用程序)
---------------------------中止重试忽略
我得到的错误是2;
我试图将一个非常大的char数组的内容写入硬盘.我有以下数组(实际上它的大小将非常大)我使用数组作为位数组,并在插入指定数量的位后,我必须将其内容复制到另一个数组并写入此副本进入硬盘.然后我将数组的内容分配为0以供进一步使用.
unsigned char bit_table_[ROWS][COLUMNS];
Run Code Online (Sandbox Code Playgroud) 我有一个 md5 函数,我已经确认它适用于文件和字符串。但是当我在非常大的文件的可变大小块上使用它时,它会生成相同的 md5 值,但块的大小不同。
我想知道是否有可能具有不同长度但可能具有相同内容的两个块导致相似的 md5 指纹。
我有一个非常大的数组,它在vc项目的许多文件中的许多函数之间共享.我的问题是,我必须在main()中声明它并在头文件中使用extern.由于数组对于堆栈而言太大,我必须使用静态,因此无法在头文件中使用extern声明.
我怎么解决这个问题?
编辑:
我所做的就像你说的那样但我得到错误LNK2001:未解析的外部符号
这是我的全球声明和外部声明:
main.c中
static unsigned char bit_table_ [ROWS] [COLUMNS];
hdr.h
extern unsigned char bit_table_ [ROWS] [COLUMNS];
ROWS和COLUMNS分别可以增长到1024和1048576