在GNU c ++编译器中运行一个包含多个源文件的程序

我在Windows 7操作系统上使用DEV GNU c ++编译器。 我需要知道如何编译具有多个源文件的程序。 这是例子, #FILE1 void f1() { printf(“this is another file under same program”); } #FILE2 int main() { f1(); return 0; } 实际上我需要这个来测试static,extern类说明符如何与多个文件一起使用。 因此,现在只有我必须学习如何在C中的单个程序中使用多个文件。 谢谢你

“malloc(sizeof(struct a *))”和“malloc(sizeof(struct a))”是否相同?

这个问题是Malloc调用崩溃的延续,但在其他地方有效 我尝试了以下程序,我发现它工作(即没有崩溃 – 这也在上面提到的链接中提到)。 我很幸运能让它工作但是我正在寻找SO专家对于它为何起作用的合理解释?! 以下是使用malloc() wrt structures和pointers分配memory一些基本知识 malloc(sizeof(struct a) * n)分配n个类型struct a元素。 并且,可以使用pointer-to-type-“struct a”的pointer-to-type-“struct a”来存储和访问该存储器位置。 基本上是一个struct a * 。 malloc(sizeof(struct a *) * n)分配n个类型struct a *元素。 然后,每个元素都可以指向struct a类型的元素。 基本上malloc(sizeof(struct a *) * n)分配一个array(n-elements)-of-pointers-to-type-“struct a” 。 并且,可以使用pointer-to-(pointer-to-“struct a”)来存储和访问所分配的存储器位置。 基本上是一个struct a ** 。 所以当我们创建一个array(n-elements)-of-pointers-to-type-“struct a” ,就是这样 有效将其分配给struct a *而不是struct a ** ? 有效访问/取消引用已分配的array(n-elements)-of-pointers-to-type-“struct a”使用pointer-to-“struct a” ? […]

关于C – union中的union作为一种类型并且作为另一种类型读取的问题 – 是否已实现定义?

我正在阅读K&R中关于C的联合,据我所知,联合中的单个变量可以包含几种类型中的任何一种,如果某些东西存储为一种类型并且提取为另一种类型,则结果纯粹是实现定义的。 现在请检查以下代码段: #include int main(void) { union a { int i; char ch[2]; }; union au; u.ch[0] = 3; u.ch[1] = 2; printf(“%d %d %d\n”, u.ch[0], u.ch[1], ui); return 0; } 输出: 3 2 515 在这里,我在u.ch分配值,但是从u.ch和ui检索。 它是实现定义的吗? 或者我做的事情真的很傻? 我知道这对其他大多数人来说似乎很初学,但我无法弄清楚输出背后的原因。 谢谢。

获取Windows的终端大小?

如何在Windows下使用普通c在控制台窗口中检查ymax和xmax? 这段代码用于linux: #include #include int main (void) { struct winsize max; ioctl(0, TIOCGWINSZ , &max); printf (“lines %d\n”, max.ws_row); printf (“columns %d\n”, max.ws_col); } 现在我想知道如何为Windows做同样的事情。 我尝试了winioctl.h但它没有定义struct winsize也没有定义类似名称的任何其他。 有小费吗? 谢谢。 PS。 在linux中你也可以使用getenv(“LINES”);找到控制台大小getenv(“LINES”); 。 在Windows下是否有类似的变量? PPS。 此外,总是有ncurses.h ,我认为这两个系统都可以工作,但是由于与我所拥有的其他库的冲突,我正在避免它。 购买力平价。 这个问题在这里获得C的终端宽度? 有很多提示,所以不需要重复。

Alloca实施

如何在D,C和C ++等语言中使用内联x86汇编程序实现alloca()? 我想创建一个稍微修改过的版本,但首先我需要知道标准版本是如何实现的。 从编译器中读取反汇编并没有帮助,因为它们执行了很多优化,我只想要规范forms。 编辑:我想困难的部分是我希望它具有正常的函数调用语法,即使用裸函数或其他东西,使它看起来像普通的alloca()。 编辑#2:啊,到底是什么,你可以假设我们没有省略帧指针。

如果我尝试访问malloc()区域以外的内存会发生什么?

我用char* memoryChunk = malloc ( 80* sizeof(char) + 1);分配了一个内存char* memoryChunk = malloc ( 80* sizeof(char) + 1); 是什么阻止我写入超过81个单元的内存位置? 我该怎么做才能防止这种情况发生? void testStage2(void) { char c_str1[20] = “hello”; char* ut_str1; char* ut_str2; printf(“Starting stage 2 tests\n”); strcat(c_str1, ” world”); printf(“%s\n”, c_str1); // nothing exciting, prints “hello world” ut_str1 = utstrdup(“hello “); ut_str1 = utstrrealloc(ut_str1, 20); utstrcat(ut_str1, c_str1); […]

将文本文件中的数字读入C中的数组

我是编程菜鸟所以请耐心等待。 我正在尝试将文本文件中的数字读入数组。 文本文件“somenumbers.txt”只包含16个数字,如“5623125698541159”。 #include main() { FILE *myFile; myFile = fopen(“somenumbers.txt”, “r”); //read file into array int numberArray[16]; int i; for (i = 0; i < 16; i++) { fscanf(myFile, "%d", &numberArray[i]); } for (i = 0; i < 16; i++) { printf("Number is: %d\n\n", numberArray[i]); } } 该计划不起作用。 它编译但输出: 编号是:-104204697 数字是:0 编号是:4200704 编号是:2686672 编号是:2686728 […]

错误:“在OpenSSL 1.1.0中无效使用不完整类型’RSA {aka struct rsa_st}”

我有旧的代码编写链接旧版本的openssl。 此代码的一部分从PEM文件加载密钥,并尝试通过使用以下代码来了解此密钥是私钥还是公钥: if( (prv->p==0 || prv->q==0) ) { // This is not a private key! throw error(“No private key for decryption”); } 使用最新版本的openssl,这(有理由)不编译: crypto.cpp: In function ‘key* decrypt_header(file_t, RSA*)’: crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if( (prv->p==0 || prv->q==0) ) { ^~ 我理解直接访问struct的私有成员被替换为一个函数,但我很难搞清楚哪个函数是什么。

int c = getchar()?

好的,所以我正在读这本书:C编程语言 – 由Kernighan和Ritchie(第二版)和其中一个例子我很难理解事情是如何工作的。 #include #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); int main(int argc, char *argv[]) { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while((len = getline(line, MAXLINE)) > 1) { if(len > max) { max = len; copy(longest, line); } } if(max > 0) […]

CreateFile:对原始磁盘的直接写操作“访问被拒绝” – Vista,Win7

相关的Microsoft文档是: 阻止对卷和磁盘的直接写入操作 CreateFile,关于物理磁盘和卷的备注 可执行文件是用C ++编写的,它调用CreateFile()来打开没有文件系统的SD卡。 对于没有管理员权限的GENERIC_READ , CreateFile()和连续的ReadFile()调用成功。 即使具有管理员权限, CreateFile也会因GENERIC_WRITE失败。 在资源管理器中,我在Properties> Compatibility> Privilege Level下设置Run as Administrator。 我还尝试从Administrator cmd运行可执行文件(以Ctrl + Shift + Enter开头,“管理员:”在窗口标题中,正确提升)。 不过,我得到了ERROR_ACCESS_DENIED (0x5)。 我是否必须将其他内容传递给CreateFile ? 我不知道什么是安全属性,我只是传递NULL, 相关代码在第92行, 在这里第48行。 或者是否还有其他任何东西应该设置为使用管理员权限运行该进程? 相关问题: 我可以在用户模式下获得Vista和Windows 7下的原始磁盘扇区的写入权限吗? Windows Vista中的原始分区访问 如何在C中直接访问原始高清数据? 是否有一种干净的方法来获取Windows下的物理分区的独占访问权限?