C 不允许指向不完整类型的指针,定义全局结构

我有困难,我不能在其他.c文件中使用结构指针, 当我将指向结构的指针传递给与结构不在同一.c文件中的函数时,总是会出现这样的消息,这让我很恼火。而且,当我不能从另一个.c文件访问一个结构的结构成员时,我是g 我做错了什么?我的包括?例如,我的两个structs.h文件: 服务器.h: #ifndef SERVER_H #define SERVER_H typedef struct Server_s* Server; #include <stdio.h> #include <s

使用位运算符在C中最多两个数字

可能重复: 更大: if x > y then return 1, else return 0 例如: Is大于(4,5)=0 Is大于(5,4)=1 合法运营商:!~&^|+> 这个函数更大 我试过: int isGreater(int x, int y) { return (y+(~x+1)) >> 31 & 1; } 但不起作用(( 让我知道我还能做什么?给定x,y 试试x+-y 如果小于0,则y更大;如果大于0,则x更大 -y=y的二进制补

C 简单递归问题

这段代码给出了计算给定数的阶乘的每一步结果,但我只想要最终结果 #include <stdio.h> long int factorial(int n) { if (n <= 1) return(1); else n = n * factorial(n - 1); printf("%d\n", n); return(n); } main() { int n; printf("Enter n: "); scanf("%d", &am

C 是否有任何主要的编程语言不支持';你不支持任何形式的反思吗?

维基百科对反射的定义如下: 在计算机科学中,反射是计算机运行的过程 程序可以观察(做类型内省)并修改自己的类型 运行时的结构和行为。[1] 是否有任何主要的编程语言(在学术界或工业界广泛使用)不支持任何形式的反射?我目前想到的所有例子至少都有有限的支持。但是对于C,我不确定。 < P> C,C++没有任何形式的反射。可以使用编译器将调试符号嵌入到可执行文件中,然后从可执行文件中处理符号表。但是,此过程必须由代码实现(即用c编写代码以分解和处理可执行文件中的符号表)。因此,它不是语言中固有的。 <

在opencv中使用线程

im使用opencv检测视频馈送中的彩色球。我正在记录圆圈的中心点。当白球移动时,我想在显示视频馈送时进行10秒的检测。在这10秒钟之后,我希望运行下一段代码。我在这方面遇到了麻烦。代码如下 while(1) { img = cvQueryFrame( capture ); CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, 7, 45, 40,0,25); float* p;

C 如果_nametoindex()速度慢,可能会导致什么原因?

在我测试的常规linux机器(内核3.4)上,它运行得非常快。但是当我把程序移到另一个linux机器(内核3.0)上时,这个函数运行得非常慢,大约需要2.5毫秒才能返回,这就慢了500倍,这导致了一个很大的性能问题 那么,造成如此巨大差异的可能原因是什么呢?我不知道为什么在运行Linux 3.0的另一台机器上速度会慢得多;有很多可能的原因,例如内核中的错误或某些缓慢的硬件。你可以凭经验来确定这一点。首先,看看问题是否出在内核版本上;在速度较慢的机器上安装较新的内核,并查看是否可以修复它。如果你不

C 什么将机器定义为32位

我只是想知道,通过说32位机器和64位机器,到底是什么组成了32(64)位机器,所以我们把它定义为32(64)位机器。由于我目前正在学习C语言,我发现指针和内存之间的关系很好地解释了这一点。由于一个内存地址指向一个字节,因此如果内存地址由32位组成(即指针为4个字节),它最多可以有2^32个可能,这意味着它最多可以表示2^32个字节,这导致32位机器最多支持4GB RAM。这是公平的假设吗?那么,32位或64位机器是由其内存地址大小定义的吗 此外,如果一台机器是32位的,那么该机器上C中的指针是

我在x中出现多少次(无符号32位整数C)

这对我来说有点困惑,但我必须看看我在x中出现了多少次。 所以如果有人为i输入3,x为4294967295,那么应该是0次,但是如果有人为i输入9,为x输入4294967295,那么应该是3次 这就是我所拥有的,但是输出显示0和9,所以它不起作用 int main(int argc, char** argv) { unsigned int i; scanf("%u", &i); unsigned int x; scanf("%u", &x);

用C中的另一个字符串替换字符串的一部分

这是我的源代码。当我输入一个字符串“我在CSE第二年。”并将CSE第二年(即loc 9到15)替换为ECE第三年时,我会在字符串末尾得到一些垃圾值。在rslt2字符串的开头还有一个换行符。rslt2有点问题。有人能纠正这个错误吗 //splitting a string and replace latter part of string by another string #include<stdio.h> #include<string.h> int main() {

fgetc返回一个未知字符

我有以下代码: FILE *f = fopen('/path/to/some/file', 'rb'); char c; while((c = fgetc(f)) != EOF) { printf("next char: '%c', '%d'", c, c); } 出于某种原因,当打印出字符时,在文件末尾,将打印出一个不可渲染的字符以及ASCII序号-1 next char: '?', '-1' 这应该是什么角色?我知道这不是EOF,因为有一个检查,在打印字符后,程序很快就会出错。这

C 是否有一个好的Valgrind窗口替代品?

当我发现Valgrind只适用于Linux时,我正在研究Valgrind以帮助改进我的C编码/调试-我没有其他需要或兴趣将我的操作系统移动到Linux,因此我想知道是否有一个同样适用于Windows的程序。我过去有机会使用过,这非常好,但它相当昂贵。 一个更便宜的解决方案可能是,我只使用了5.x版本,尽管在附加到需要调试的进程时遇到了一些问题,但它工作得非常好。有关类似工具的列表,请参阅软件QA测试和测试工具资源页上的“”链接 我过去曾使用BoundsChecker、DevPartner Stu

使用C将最后四个fwrite()保留在文件中

我需要一些帮助来维护一个数据日志(任何.txt文件),在那里我需要最后四/五个事务,并删除除此之外的任何内容 例如:我使用fopen()创建了file.txt,并开始每隔30秒从缓冲区使用fwrite()进行写入。前四次写入是可以的,但当我第五次写入文件时,我希望第一个条目被删除,第五次写入()移动到第四位,其余的被相应地移动,即第二次写入第一次,第三次写入第二次。注意:每个write()数据的时间和大小与温度读数或湿度读数相同 谢谢 高拉夫 创建临时文件 从旧文件复制4个最新条目 添加新条目

C pthread数组-线程是否仍处于活动状态?

服务器创建线程,这些线程使用 if (pthread_create(&array_of_threads[index], NULL, &thread_function, &argument) != 0) signal error 线程在客户端完成后自行结束 但是,可能会出现服务器必须退出的情况—例如,在接收到信号或特殊消息后 当这种情况发生时,我希望对正在运行的线程调用pthread\u cancel(这些线程将调用pthread\u cleanup,并释放资源,

C套接字编程写/读脏内存

我在我的C程序上编写了两个自定义函数,供我的大学老师建议使用: ssize_t FullRead(int fd, void *buff, size_t count) { size_t nleft; ssize_t nread; nleft = count; while(nleft > 0) { nread = read(fd, buff, nleft); if(errno == EINTR) { con

C语言中的错误分析

我基本上想做的是从一个文件中获取行并将它们放入一个链表中。但是,当执行到达时,由于“feof”函数,部分程序停止。我无法理解这个问题 谢谢你的帮助。这是一个非常频繁的变化,只是改变一下而已 struct node { char item[200]; struct node* next; }; FILE* unionMethod(char f1name[50], char f2name[50]) { FILE* f1; FILE* f2; f1=fopen(f1nam

C 为什么下面代码中两个变量的大小不同? #包括 int main() { 短i=90L; 长j=90; printf(“%d”,尺寸(i)); printf(“%d\n”,sizeof(j)); 返回0; }

我刚刚读到,如果我们把L放在一个整数值的末尾,那么实际上它得到的存储等于长值,那么他们这么说的基本意思是什么,当我计算两个变量的大小时,它是不同的,如果它实际上占据了一个长变量的大小,很明显,它会显示大小为4字节,但它只显示了根据短数据类型大小的大小,那么它背后的原因是什么呢 值是真实的,但当我对I的值进行priint时,它只打印为90,那么一切是如何发生的呢 #include<stdio.h> int main() { short i = 90L; long j = 90;

实现简单内存池的C库

我注意到我正在处理的应用程序(用C编写,顺便说一句)充满了realloc调用,这些调用由多个线程并行执行。我想让它更快的是使用内存池,这样我就可以以非常快的方式扩展原始阵列。但是,我不想创建自己的内存池,我只想使用线程安全(或允许多个线程同时创建池)并支持重新分配的库 我已经看了前面的问题,关于同一个问题,但是他们没有提供最终的解决方案。例如: typedef struct { void *bytes; /* Pointer to the allocated _bytes_. */

Lex和Yacc分段错误

我正在尝试使用lex和yacc为mini-c编写解析器。在单线输入的情况下,它工作得很好;在多线输入的情况下,它抛出了一个分段错误。运行GDB没有帮助 c、 l文件 alpha [a-zA-Z] digit [0-9] %{ #include <stdlib.h> void yyerror(char *); #include "y.tab.h" %} %% [ \t] ; [ \n] { yylineno = yylineno + 1;} int return I

C 使用开关进行字符比较

我正在逐字符比较字符串 下面是我的代码中导致问题的部分: switch(line[1]) { case 'u': switch(line[2]) { case 't': switch(line[3]) { case 't': switch(line[4]) { case 'o': switch(line[5]) { case 'n':

在Eclipse中找不到使用gcc-shared构建dll的库

我正在尝试使用我刚刚在Eclipse的C程序中使用MinGW在Windows上编译的FFMPEG库。我已成功构建了一个简单的HelloJNI.c文件并运行它: gcc $(INCLUDES) -c -g -w HelloJNI.c gcc -shared -o $(BIN_DIR)/hello.dll HelloJNI.o 我现在正试图编译一个使用ffmpeg的ffmpeg_native.c文件,但运行以下命令时出错: LIBRARY_PATH = -L:"c:/Dev/msys-1.0/lo

C 学校编程的问题

我正在为我的班级编写一个研讨会(我是一个完全的初学者),我遇到了一些问题 #include <stdio.h> #define arraylength 100 void GetInt(); void GetFloar(); int main (void) { int i, k, j; float price[arraylength]; int barcode[arraylength]; int quantity[arraylength];

C 如何在main()之外分配结构?

我构建了一个图书结构,如下所示: typedef struct _book{ char name[NAME_LENGTH]; char authors[AUTHORS_NAME_LENGTH]; char publisher[PUBLISHER_NAME_LENGTH]; char genre[GENRE_LENGTH]; int year; int num_pages; int copies; }book; 我试图定义一个库,它是一个书

用C语言演示虚拟内存

然后在“地址”位置打印变量“staticVar”的值 通过一些快速的研究,我了解到添加“&”意味着引用了变量“staticVar”,printf语句中的“%x”以十六进制打印出值。即使有了这些信息,我仍然不明白为什么会这样 我也在网上读到,你可以用这行打印出某个变量的地址 printf("Address: %x\nValue: %d\n", staticVar, staticVar); 这样做有好处吗 我可能只需要解释一下“&”符号的有效作用 在此特定上下文中,符号“&”有效地用变量的地址替换

为什么这种不正确的编译和链接会导致我的C源文件被删除?

我注意到错误的编译和链接命令会导致删除我的一个C源文件 假设我有两个源文件和一个头文件:test1.c、test2.c和header.h。然后,我错误地尝试用shell命令cc-std=c99-Wall-Werror-pedantic-o test1.c test2.c编译并链接这些文件 由于此错误命令,我收到错误消息: 架构x86_64的未定义符号: “_main”,引用自: 主可执行文件的隐式输入/启动 ld:未找到架构x86_64的符号 在此之后,删除文件test1.c 我很好奇是什么导致

C阵列错误存储问题

在这段代码中,我们希望用户输入5个数字,并将这5个数字存储在数组中,然后在数组中打印出这5个数字。但下面的代码只是将用户最后的输入存储在数组5中,而不是存储其余4个其他数字 #include <stdio.h> #include<stdlib.h> void main(){ int Array[5]; int i; int l=0; int k=0; int j=0; while(j<5) { printf("enter k valu

scanf don';我不能储存我的总数

当代码运行时,我的scanf不显示总和,只有0.00000000 我不知道问题出在哪里 int main() { float A, B; float R = A+B; printf("Digita o valor A: "); scanf("%f",&A); printf("Digite o valor B: "); scanf("%f",&B); printf("A soma de %f e %f foi igual a: %f",A,B,R); return 0;

循环C编码中的数组插入 for(t=0;t

也许您想使用微秒,这样您就可以使用整数进行采样。您只需调整公式,使结果一致。切勿将浮点值用作循环索引。使用整数: for(t=0; t<=1; t+=1e-4) { input [n] = 2 + sin(w*t); } double t=0.0; 对于(int i=0;i

如何使用C计算文件中的行数

我用c语言设计了一个程序来计算行数,但它显示了垃圾值。 我的文件包含如下数据 2,8,10 3,5,7 4,5,1 3,6,8 3,7,8 3,8,4 为了计算行数,我将程序编写为 int count_lines =0; char sample_char; FILE *fptr; fptr = fopen("demo3.txt", "r"); sample_chr = getc(fptr); while (sample_chr != EOF) { if (sample_chr

这个变量存储在c的内存中的什么地方?

如果我有这样的代码: const int a=2; int b; int main() { const int c=4 static int d; int e; int f=5; } 在内存堆栈、数据、堆中,这些变量存储在哪里?特别是本地未定义变量e? 未定义的局部变量e将有一个垃圾值,它来自哪里 全局变量-->数据 静态变量-->数据 常量数据类型--->代码和/或数据。考虑当常量本身将存储在数据段中的情况下的字符串文字,并将其引用嵌入到代码中。 在函数-->堆栈中声明和定义的局部变量 在主

C 在遍历文件时,如何通过元素索引循环而不是逐字符进行迭代

我的问题是,我如何让代码通过它的索引位置,同时也得到它的长度,而不是通过逐字符进行。类似下面的内容(不起作用) #包括 int main(int argc,字符**argv){ INTC; 文件*文件; file=fopen(argv[1],“r”); int i=0; 如果(文件){ 而(我0) { 对于(尺寸i=0;i

C SEGFULT释放内存-仅当分配的内存过多时

我试图从一个文件(每行只有一个单词的格式)中读取单词到一个单链表中。下面的代码适用于小文件。一旦我开始向要读取的文件中添加很多行,就会出现segfault错误 给出segfault的行是:free(a->word)来自destroy()函数。我想再次指出两件事: 1) 如果我不调用destroy()函数,无论文件有多大,代码都可以正常工作 2) 如果我调用destroy()函数并且word文件很小(少于100k行),那么代码也可以正常工作 我不知道是什么导致了这种行为。有什么想法吗?谢谢 ty

C中最多有三个数字

我有三个数字,m,n和p。我正在尝试使用嵌套if..else if..else查找最大值 以下是我的代码: #include <stdio.h> int main() { // your code goes here float m,n,p; scanf("%f%f%f", &m,&n,&p); if(m>n){ if(m>p){ printf("%f",m);

C 什么';实际参数、格式参数、伪参数以及实际参数和形式参数之间的区别是什么?

我认为上面提到的一些只是同义词,但哪些是同义词呢?如果我错了,也请纠正我:在函数中,比如说主函数,括号中的数据是参数/参数?a参数在函数定义中定义。它是函数执行期间参数的占位符 void printMessage(string message){ //message is a parameter. } 参数是调用函数时传递给函数的值 printMessage("Hello World"); //"Hello World" is an argument. 尽管有人把论证看作是一个参数。

C 多次更改函数中数组的值

我是否可以编写一个包含数组的函数,例如大小为16?在函数的每次调用中,我都要修改数组的一部分。我想调用函数4次,直到整个数组被更改。我应该存储每次调用的结果,并在调用后使用新数组,直到所有数组都更改为止 是的,你可以。。。! 只需将数组声明为static,这样在函数执行完成后,数组堆栈帧就不会被清除。 e、 g 在本网站上提问时,请更加具体。试着对你的想法进行编码,然后提供代码和/或错误。这不是必要的。如果在main中声明一个数组f.e.,并将该数组传递给函数,则可以根据堆栈被清除的次数对其进行

关于scanf的C语言

我对scanf函数进行了分组,并将该函数命名为eno,在我的C代码中调用该函数后,它并没有完全工作。如果我在代码中单独使用scanf函数,它就会工作。所以我的问题是为什么函数不起作用?这里我显示a=0和b=1。始终: #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int eno(int, int);

从struct输入字符串后出现分段错误

因此,正如问题所说,每次我尝试为客户输入名称时,都会出现细分错误。该程序编译并运行,直到到达客户名称部分。我不确定问题是否出在malloc身上。谁能告诉我我做错了什么?我想弄明白这件事已经有一段时间了,但运气不好。谢谢 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define END_OF_STRINGS '\0' #

C 如何用strtol转换数字0?

我需要strtol来转换[0到255]范围内的一些数字 如果0也是我需要转换的数字,如何检查0的转换 long conv = strtol(argv, &p, 10); if (conv == 0) { perror("Conversion error"); exit(EXIT_FAILURE); } if ((conv >= LONG_MAX || conv <= LONG_MIN) && errno == 34); { perror

C-为什么char数组只返回最后一个值';是谁放进去的?

我在用C写。我试图从文本文件中读取行,解析行,并将一些信息放入字符串数组中。当我测试代码时,数组中的每个值似乎都是最后插入的值。这是什么原因 int r; char *users[51]; //given no more than 50 users for (r = 0; r < 51; r++) { int n = 15; //arbitrary guess at length of unknown usernames users[r] = malloc((n + 1)

C 如何使用epoll管理从多个客户端接收多个缓冲区?

我有一个服务器正在使用epoll。我的问题是,处理所有缓冲区的最佳方法是什么,这样我就可以处理缓冲区中的一半或多条消息 例如: 如果消息是“你好,来自客户号#” 通过epoll接收的缓冲区: 来自客户1:“你好,来自” 来自客户端2:“来自客户端2的你好来自客户端2的你好” 来自客户端1:“客户端号1HelloFromClient号1” 在这个场景中,我需要能够识别“HelloFrom”只是半条消息,并将其存储在某个地方。然后我需要能够处理来自客户端2的两条完整消息。然后再回到我从客户1离开的地

C语言中的Trim函数

我正在用C编写我自己的trim()。有一个包含所有字符串值的结构,该结构是由一个文件中的数据填充的,该文件包含单词开头前后的空格 char *trim(char *string) { int stPos,endPos; int len=strlen(string); for(stPos=0;stPos<len && string[stPos]==' ';++stPos); for(endPos=len-1;endPos>=0 &

C 如果没有输入两个特定的单词,有没有办法结束程序?

早上好 出于某种原因,当用户键入“google”时,它会在不应该输入的时候显示底部部分“未输入任何应用程序” 已经尝试在其中放入else语句,但仍然不起作用 ` while (1) { printf("What program would you like to open, %s?\n", name); scanf("%s", input); if (strcmp(input,"google") == 0){ printf("Opening Google C

MPLAB XC8编译器错误:";声明中没有标识符“;

我编写了一个使用定时器0中断的程序 我似乎无法编译我的代码,第14行有一个错误,声明中没有标识符 以下是全部代码: #include<xc.h> #define _XTAL_FREQ 4000000 #define param_1=0b10001000; #define param_2=0b10101010; int counter=0; void interrupt f1() { if(TMR0IE && TMR0IF) { count

VSCodeRunner问题

我为我的一个弟弟在VSCode中建立了一个开发环境C,我制作了build.json和tasks.json,代码编译并运行得很好。但是对于刚接触编程的人来说,这是一件很麻烦的事情。我找到了一个一键编译和运行按钮的扩展代码运行程序。它工作得很好,但我注意到弹出的coderunner终端只是输出,不接受任何输入。谷歌搜索并找到了一个简单的解决方案,就是让coderunner使用bash。但它根本不起作用了 yudha@LAPTOP-PLIIOJAT /cygdrive/c/Users/yudha/On

Win32 C++;ListView HDN_BEGINTRACK不工作

我有一个ListView,我想阻止它的列被调整大小。我使用的代码与问题类似,但我的HDN_beginrack消息无法识别 创建ListView的我的代码: HWND Instructions_ListView = CreateWindowEx(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT, WC_LISTVIEW, L"", WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_ED

C 指针和括号语法混乱

试图破译以下函数。 我知道pCfg是任何类型的指针,但我不确定*(AppBIACfg_type**)pCfg=&AppBIACfg正在分配给&AppBIACfg的地址 AD5940Err AppBIAGetCfg(void *pCfg) { if(pCfg){ *(AppBIACfg_Type**)pCfg = &AppBIACfg; return AD5940ERR_OK; } return AD5940ERR_PARA; } 它获取全局AppBIACfg

C 指针报告不同值的副本

我正在用c语言建立游戏的项目系统 我想使用头来存储项数组的地址, 当此程序运行时,标头将返回 相应的地址 这是我的密码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> struct Header{ struct ItmInfo *itmAddress; // a pointer that store the address of ItmI

C 它为什么不';是否输入一些else if语句?

某些else-if语句的工作方式与'else-if(strcmp(player1,player2)==0)不同 '或'else if(strcmp(player1,“剪刀”)==0')。这可能是他们随后的“如果”声明吗?它们是其他else-if语句的副本(经过一些修改),可以正常工作。它们几乎一模一样,所以我不明白它们为什么不起作用 #include <stdio.h> #include <string.h> int main(void) { char