Tag: 覆盖

如何保护动态char不被第二个动态char覆盖?

#include #include #include char print_two(char *reg, char *s) { int i, l_s = (int) strlen(s), l_reg = (int) strlen(reg); for(i = 0; i < l_reg; i++) { printf("\n %c \n", reg[i]); } return 0; } int main(void) { char reg; printf("Give a rule: "); scanf("%s", &reg); char s; printf("Give a string: "); scanf("%s", &s); print_two(&reg, […]

如何覆盖C库中的fprintf? 如何将GCC选项添加到顶层CMakeLists.txt?

我知道如何在简单的示例中覆盖C-lib函数。 但我需要的是一个真正的项目,它有数百个调用fprintf的文件。 在每个文件中,都有一个”#include ” ,以及数十或数百个fprintf调用。 我想让所有这些fprintf做我自己的工作。 我无法删除”stdio.h”并添加”#include ” ,其中myprint.h定义了自己的工作的fprintf的实际function或宏。 “stdio.h”在项目中有许多其他调用。 我想要一个简单的解决方案。 谢谢! 我的问题是否足够明确?… 2014.03.08更新:首先向所有女性致敬…… 请看下面的第二篇文章。

奇怪的全局变量行为,一旦变量名称被更改,问题就会消失

在我的大学练习中,我遇到了变量的奇怪行为。 /* Main parameters */ double sizeX, sizeY; /* Size of the global domain */ int nPartX, nPartY; /* Particle number in x, y direction */ int nPart; /* Total number of particles */ int nCellX, nCellY; /* (Global) number of cells in x, y direction */ int steps; /* Number of timesteps */ double […]

如何在C中读取和覆盖文本文件?

我有一个文本文件text.txt读取(为简单起见) this is line one this is line two this is line three 为了简单起见,我只是试图将每行中的第一个字符设置为’x’,所以我想要的结果是 xhis is line one xhis is line two xhis is line three 所以我打开text.txt文件并尝试用所需的输出覆盖每一行到同一文本文件。 在while循环中,我将每行中的第一个字符设置为“x”。 我还将变量“line”设置为等于1,因为如果它在第一行,我想回放到文件的开头,以便在开始时而不是在文件的末尾进行覆盖。 然后增加行,以便在下一次迭代时跳过倒带,并且应该继续覆盖第2行和第3行。 它适用于第一线。 有人有任何解决方案吗? 顺便说一句,我已经在stackoverflow和其他网站上进行了广泛的研究,但没有运气。 这是我的代码,我的输出也在下面: #include #include #define MAX 500 int main() { char *buffer = malloc(sizeof(char) * MAX); FILE *fp = fopen(“text.txt”, “r+”); int line […]

我可以覆盖用C编写的Ruby方法吗?

是否有可能用Ruby代码rb_error_frozen属于Ruby本身的方法,例如用C语言编写的rb_error_frozen ? 背景 :我想知道在修改冻结对象时是否可以使Ruby仅记录警告,而不是引发exception。 这样,我可以记录各种状态修改,而不是在第一个修改时停止。 我主要是想用YARV来做这件事,但如果能让它变得更容易,我可以使用另一个实现。 是的,这是一个崭新的项目! 不要在生产环境中尝试这个!

更新包含c中结构的二进制文件,更改为损坏文件的其余部分的偏移量

我正在尝试编写一个方法,在给定包含要更新或追加的值的文件的情况下,将更新第二个二进制文件。 显然,当我覆盖二进制文件中的结构时,偏移量会以某种方式发生变化,从而破坏其后的所有内容。 我做错了什么,有没有办法在不截断和附加到文件的情况下阻止这种情况? 当前代码: typedef struct{ int number; double price; } stock; void update(char* updatefile, char* binfile){ FILE *fin, *fout; stock *currStock; stock *updateStock; int currPos; int update; int val1=0; double val2=0; currStock = malloc(sizeof(stock)); updateStock = malloc(sizeof(stock)); fin=fopen(updatefile,”r”); while (fscanf(fin, ” \n%d %lf”,&val1,&val2) != EOF) { currStock->number = val1; currStock->price = val2; printf(“Updating file […]

是否有可能在C中重载运算符?

是否有可能在C中重载运算符(如比较运算符)? 如果是这样,你怎么做? 我做了一个快速搜索,但我找到的只是用于C ++,我想要的是C语言。 有人有主意吗? Edit1:我的想法是:我有一个结构,我需要做一个比较(基于结构的一个成员)。 为此,我想将运营商与我的新“数据类型”相关联。 编辑2:我完全知道我可以不使用运算符重载,但想知道你是否可以使用OVERLOAD执行此操作。 答案:重载的概念与面向对象的编程有关。 由于C不是面向对象的,因此不能包含过载的概念。 (:

全局覆盖visual c ++中的malloc

我试图找到一种在visual c ++(2005)中全局覆盖malloc和相关函数的方法。 我的设置是一个带有静态链接运行时库的DLL,它包含我自己的c ++代码,外部c ++和c代码。 我想要完成的是允许dll的用户设置他们自己的内存分配函数的实现。 我无法使用的解决方案: 全局覆盖new和delete,我的代码库中有很多外部C库,这意味着它不会捕获很多分配。 将malloc定义为不同的符号。 这将迫使我将此定义推送到所有使用的外部库的构建设置中,我真的想避免这种情况。 我不关心的事情 如果任何外部库以某种其他方式分配内存(HeapAlloc,内存映射文件或它们提出的任何内容),我接受通过重写malloc将无法正确跟踪它。 我能提出的最合理的解决方案是以某种方式干扰链接过程并确保我自己的malloc被链接而不是标准的,最好是我希望能够使用旧的malloc函数作为默认值。 在google perf-tools中 ,似乎他们在运行时手动修补函数的代码,以允许在调用原始函数之前调用钩子函数。 这真的是最好的方法吗?