C:函数指针和类型定义问题

我有一个以函数指针为参数的C函数,它是一个析构函数,我将在程序结束时调用它。以下是我的函数原型: int store_dest(void (*routine)(void *)); void* my_dummy_dest(void* foo); 我想将这个函数指针与其他一些信息一起存储到一个结构中。为了有一个好的结构,我想要一个指向这个函数指针的typedef。这是我的typedef: typedef void (*my_destructor)(void *); 这是我的结构: typede

在嵌入式C中与sprintf()一起使用浮点

伙计们,我想知道float变量是否可以用在sprintf()函数中 char str[100]; int d1 = value; 比如,如果我们写: sprintf(str,"adc_read = %d \n",adc_read); 如果adc\u read是一个整数变量,它将存储字符串 “adc\u read=1023\n” 在str(假设adc\u read=1023) 如何使用浮点变量代替整数?使用%f修饰符: sprintf (str, "adc_read = %f\n", adc

如何在C中实现回调函数?

通用条款4.4.3 c89 我正在创建一个客户机-服务器应用程序,需要实现一些回调函数 但是,我在回调方面没有太多经验。我想知道,在设计回调时,是否有人知道一些好的参考资料。是否有用于c的设计模式。我确实看到了一些模式,但在那里所有的C++ +< /P> 非常感谢您的建议,C中的回调是使用函数指针实现的。这可能有助于起点: 而且 这里是一个非常粗略的例子。请注意,我试图演示的唯一一件事是回调的使用,它的目的是提供信息,而不是演示 假设我们有一个库(或任何围绕结构旋转的函数集),我们将有类似的代

C 程序完全凭意志力溢出调用堆栈

以下是来自以下位置的调用堆栈: 轨迹在第511帧处截断 以下是writeWithFormat: int writeWithFormat(FILE *file, NSString *format, ...) { va_list args; va_start(args, format); int written = writeWithFormatAndArgs(file, format, args); va_end(args); return written;

C 诅咒键盘不';在def_prog_模式和reset_prog_模式后不工作,刷新

我试图通过系统调用从我的ncurses用户界面转到编辑器,然后再返回。在几个友好的程序员的帮助下,我学会了如何使用def_prog_mode和refresh在用户从编辑器返回后恢复终端UI的状态 因此,我的代码如下所示: // save state and exit ui def_prog_mode(); endwin(); // system call... system(...) // restore ui reset_prog_mode(); refresh(); 这很好地恢复了我的

C 指针指向的int的增量值

我有一个int指针(即int*count),我想通过使用++操作符来增加所指向的整数。我想我会打电话给: *count++; 但是,我得到一个构建警告“expression result unused”。我可以:打电话 *count += 1; 但是,我也想知道如何使用++操作符。有什么想法吗?尝试使用(*count)+*count++可能会增加指向下一个位置的指针,然后使用间接寻址(这是无意的)。++与*具有同等的优先级,并且关联性是从右向左的。请看,它变得更加复杂,因为即使++将与指针关

C GTK按钮只显示文本,不显示图像

我在GtkHButtonBox中有一个GTK按钮,它不显示我添加到其中的图像。它只是显示文本。代码如下: GtkImage *image = (GtkImage *) gtk_image_new_from_file("Gateway-LT21-netbook-2-540x359"); GtkButton *button = (GtkButton *) gtk_button_new_with_label("test"); gtk_button_set_image(button, (GtkWidge

如何在C语言中使用给定的FFT函数?

对不起,这是我第一次在这里提问,我已经给出了FFT函数 void fft_1d(int n, float xr[256], float xi[256], int ntype) { /* compute the FFT of a complex signal xr and xi are the real and imaginary parts respectively xr and xi contain the signal as input and the FT as o

C 如何创建带有文件孔的文件?

文件孔是文件中的空白空间,但它不占用任何磁盘空间,并且包含空字节。因此,文件大小大于磁盘上的实际大小 但是,我不知道如何创建一个带有文件孔的文件来进行实验 使用带有seek参数的dd命令 dd if=/dev/urandom bs=4096 count=2 of=file_with_holes dd if=/dev/urandom bs=4096 seek=7 count=2 of=file_with_holes 这为您创建了一个从字节8192到字节28671的文件 下面是一个示例,演示了文件

C指针问题

假设我要存储n条指令,并在每条指令中存储一个值。 如果有**说明,我该怎么做?? 所以我希望以后能够调用特定指令中的值 非常感谢 到目前为止,我尝试了这些,一些扫描和动态数组创建。 所以它需要计数器的数量,然后需要线程的数量(pthreads),然后需要每个线程中的指令的数量。我正在试图找到一种方法来将指令存储在每个线程中。**给出了结构 struct instruction { int value; }; int n; // Number of instructions struct

C-序列化技术

我正在写一些代码来序列化一些数据以通过网络发送。目前,我使用以下基本过程: 创建一个void*缓冲区 对我要通过网络发送的数据应用任何字节排序操作,如hton系列 使用memcpy将内存复制到缓冲区中 通过网络发送内存 问题是,对于各种数据结构(通常包含void*数据,因此您不知道是否需要关心字节顺序),代码会变得非常臃肿,因为序列化代码非常特定于每个数据结构,根本无法重用 有哪些优秀的C序列化技术可以让这变得更容易/不那么难看 - 注意:我绑定到一个特定的协议,因此我无法自由选择如何序列化数据

C 选择性调用写入包装器

我截取了write library函数来重定向写操作,但只希望有一些写操作可以写入包装器,而其他写操作(用于写入套接字)应该转到原始libc函数。已尝试使用dlsym,但似乎不起作用 已使用LD-PRELOAD环境变量 非常感谢您的帮助 编辑: 代码的一部分 int call_execute() { ..... static ssize_t (*real_write)(int,const void*,size_t) = NULL; ... real_write= (size_t

C mpi.h:使用不定义它的类型?

我正在尝试将OpenMPI.h的重要部分转换为D编程语言,以便从D调用它(HTOD根本不起作用)。我无法理解以下代码: typedef struct ompi_communicator_t *MPI_Comm; OMPI_DECLSPEC extern struct ompi_communicator_t ompi_mpi_comm_world; OMPI_DECLSPEC extern struct ompi_communicator_t ompi_mpi_comm_self; OMPI_DE

是否可能了解PCL‘;在PIC16/18中捕捉到中断前的s值?

我想知道在捕捉到中断之前,程序行中执行的最后一条指令是什么。似乎不可能读取微控制器堆栈。在PIC16上不可能,因为软件无法访问硬件堆栈。但是,可以访问PIC18上的硬件堆栈。申请须知是一个很好的参考资料 如果您只想在调用中断时看到PCL值被推到堆栈上,那么您只需要读取TOSU、TOSH和TOSL寄存器

如何确定同一iOS设备上对等TCP连接的PID?

出于我不想讨论的原因(与我无法更改的第三方库的兼容性有关),我需要使用TCP套接字在iOS中的单个进程内执行IPC 为了防止其他进程与我的TCP IPC套接字通信,我想用操作系统验证调用connect()(从另一个线程)的进程是否与我自己的进程具有相同的PID 在OSX上,我注意到netstat没有此信息(与Windows和Linux等其他操作系统不同),我能够确定此信息的唯一方法是使用lsof。我不确定iOS沙盒中可能有什么可用的功能,但到目前为止,我的最佳选择(尽管它似乎很昂贵)似乎是找出l

C kill函数是同步的吗?

Linux中的kill函数是同步的吗?比方说,我通过编程调用kill函数来终止一个进程,它只会在预期进程终止时返回,还是只发送信号并返回。如果是这种情况,我如何让它等待预期进程被终止?否,因为它不会终止任何东西,所以它只向进程发送一个信号 默认情况下,此信号甚至可以被阻止或忽略 您不能阻止表示发送的SIGKILL 要等待进程结束,请执行以下操作: while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done kill系统调用

相当于mongo查询db.users.find({age{$gt:3},{})的c语句

我搜索了条件语句的用法(,),例如,查询: find({ age : { $gt : 5, $lt : 12}}) 将这样写: bson_init(&b); bson_append_start_object(&b,"age"); bson_append_int(&b,"$gt",5); bson_append_int(&b,"$lt",12); bson_append_finish_object(&b); bson_finish(&b); 然后

是否有strcpy_和/或TR24731-1的免费实施? 我有一个C和C++混合的老项目。它广泛使用C字符串和strcpy,strcat,strncpy,strncpy等。我发现了一些缓冲区溢出,我想使用更安全的函数,比如strcpy。MSVC包括这些功能,但我需要一些能在各种平台上工作的东西——至少是linux、osx和windows

我确实知道strlcpy,但正如许多人所注意到的(),它实际上并不是一种改进 那么:strcpy_s、strcat_s等的免费实现,还是整个系统的免费实现 我需要的是公共域或BSD,但如果您知道其他许可证下的实现,请继续列出它们-我相信其他人会受益。尝试使用该库。它位于下,并根据此实现您要查找的功能: Safe C库根据ISO/IEC TR24731提供绑定检查内存和字符串函数。 这些函数是现有标准C库的替代函数,可促进更安全、更安全的编程 您可以使用memcpy和memset等,它们比字符串

C 使用XOR属性查找数组中的修改元素

正在尝试从以下位置提出此问题: 如何查找数组中的修改元素 例如:数组A={1,2,3,4,5,6}在修改之前和修改之后 A={1,2,3,7,5,6}。此处,滤芯4替换为滤芯7 有人使用XOR属性来解决这个问题 int getModifiedElement(int arr1[ ],int arr2[ ]) { int xor1 = arr1[0]; int xor2 = arr2[0];

在C语言中将字符串拆分为两半

我有一个包含空格的字符串,例如“print 2”或“print 3 test”。我试图删除第一个参数-在这些示例中,打印 我试过strtok(): 然而,打印测试将出现故障。我尝试创建一个函数,它在main()中运行良好,但是当从我需要的函数中调用它时,它也会出错 char* split(char S[], int N) { printf("Running split() on %s\n", S); int Spaces = 1; int i = 0; for (

如何在ARM arch机器上写入硬件控制器寄存器和DMA?

调用此函数时: static inline void writel(unsigned int v, volatile void __iomem *addr) { *(volatile unsigned int __force *)addr = cpu_to_le32(v); } 地址是绝对地址还是通过MMU DMA-写入地址是否由MMU翻译 为什么没有提到系统中的寄存器地址 以下是我的答案,希望对您有所帮助: 是的,地址由MMU翻译。传递给writel的地址应该是通过ioremap调用

C 套接字编程包套接字

我正在编写代码,以便通过SOCK\u RAW套接字与另一台计算机上的进程进行通信 我知道另一台机器的IP地址 我知道一次填充一个字节的sockaddr\u ll.sll\u addr值可以解决问题,例如 socket_address.sll_addr[0] = 0x00; socket_address.sll_addr[1] = 0x04; socket_address.sll_addr[2] = 0x75; socket_address.sll_addr[3] =

什么是C中的复合类型?

摘自(第66页): 示例给出了以下两个文件范围声明: int f(int (*)(), double (*)[3]); int f(int (*)(char *), double (*)[]); 函数的结果复合类型为: int f(int (*)(char *), double (*)[3]); 在上面的示例中,他们解释了复合类型是一种与两种不同类型兼容的类型。我会直观地理解短语“复合类型”的意思是“结构和联合”,这似乎偏离了目标 C中的复合类型是什么?它的用途是什么?有人能详细解释

C 我可以让#Pragma unroll接受宏/表达式而不是普通数字吗?

我试图告诉我的编译器使用#pragma unroll为我展开一个循环。但是,迭代次数由编译时变量决定,因此循环需要展开那么多次。像这样: #define ITEMS 4 #pragma unroll (ITEMS + 1) for (unsigned int ii = 0; ii <= ITEMS; ++ii) /* do something */; #定义项目4 #杂注展开(项目+1) 对于(unsigned int ii=0;ii您可以用另一种方法: 注意:刚刚注意到丹尼

C 如何自动删除空行-kdevelop

有没有一种方法/工具可以自动删除kdevelop版本4.3.1上的空行 例如: tmpTime.tm_year = RTC_Time->bYear1 + RTC_Time->bYear; tmpTime.tm_mon = RTC_Time->bMonth; tmpTime.tm_mday = RTC_Time->bDay; 将变成这样: tmpTime.tm_year = RTC_Time->bYear1 + RTC_Time->bYear; tmpTi

C 将文本从文件从服务器发送到客户端时出现分段错误

我目前仍在通过Ubuntu用C编写一个简单的客户机-服务器应用程序。到目前为止,我的登录功能似乎运行良好(在客户端输入一些文本,从服务器中的文件中获取文本并进行验证),但这个特殊的显示选项给我带来了麻烦 服务器端代码的一些片段(我从另一个站点抓取了下面的文件复制到缓冲区函数): 在客户端,利用交换机提供各种选项: char bbuf[BUFSIZE+1]; //BUFSIZE is 1024 switch (mmenuc) { case 1: { strcpy (mmenuf, "a");

C 将调色板与SDL一起使用

我正在用SDL和C作为个人项目和学习体验,从头开始创建Gameboy彩色游戏的PC端口。这个游戏使用调色板交换来创建效果,我也希望能够做到这一点。我读过SDL有一些调色板函数,但它们被贬低了,几乎没有功能 既然我不能使用这些,那么在我的例子中,模拟调色板交换的最佳方法是什么?不推荐使用?你能给我一个到来源的链接吗 可能(未测试)由于您的桌面配置,您不能直接将其用作输出表面,但SDL支持AIK 8位索引调色板表面,您可以创建一个索引屏幕外表面,调整调色板,然后将其blit到输出表面 编辑 这是一个

C 什么时候在套接字块上执行写操作?

我正在编写一个基于epoll循环和线程池的网络应用程序来处理请求。在每个线程中,我都会特别注意不要阻塞客户端读取,方法是使用非阻塞套接字,并在读取返回EAGAIN时立即返回(或者使用符合POSIX的eWoldBlock…) 我也应该特别注意套接字写入吗?我没有看到自己发送足够的数据来填充系统TCP缓冲区,而阻塞一段时间应该不会太有害。这是套接字上写操作阻塞的唯一情况吗?缓冲区大小不够 另外,套接字是否可以声明为非读阻塞和写阻塞?还是我应该一直使用fcntl在这些行为之间切换 谢谢 套接字写入阻塞

C 0[p]在做什么?

下面的C代码在做什么 int i; int* p = &i; 0[p] = 42; 我认为这不会编译事件。但它甚至执行时没有分段错误。所以我想知道我错过的[]操作符有什么奇怪的用法 0[p] in0[p]=42 相当于p[0] +操作是可交换的,我们有: p[0] == *(p + 0) == *(0 + p) == 0[p] 0[p]相当于p[0]。两者都转换为 0[p] = *(0+p) and p[0] = *(p+0) 从上面的陈述来看,两者都是相等的。C标准通过以下方式

学习pipes、exec、fork,并尝试将三个流程链接在一起

我正在学习使用管道,并遵循上面的代码。该程序使用fork生成两个子进程。第一个子级运行“ls”命令并输出到pipe1。第二个从pipe1读取的数据运行“wc”,并输出到stdout 我试图在中间添加第三个过程,从PIPE1读取并输出到PIPE2。基本上就是我想做的 ls | cat | wc -l 我想做的是: (ls)stdout -> pipe1 -> stdin(cat)stdout-> stdin(wc -l) -> stdout 任何东西都不会打印到标准

int到char赋值中的不兼容类型

大家好,我正在尝试计算文件中的行数,但似乎fgetc(file)返回int,并且无法转换为字符。帮帮我,我做错了什么?在你的代码中ch不是char,它是char[20]——一个由20个字符组成的数组。您不能将fgetc的结果分配给它,因为fgetc返回一个int(它包含一个char或EOF标记) 将ch的声明更改为int ch,以解决此问题。您也可以放弃对feof的调用,因为它发生在错误的时间(您在读取操作之后调用它,而不是在读取操作之前) 不要使用feof()来控制循环的终止;直到你读不懂一个

C 如何创建一个rake规则来匹配来自不同文件夹的文件?

我需要创建一个rake规则,将“src”文件夹中的每个C文件编译成“obj”文件夹中的相应文件。在make中,这是通过以下方式实现的: obj/%.o: src/%.c 我一直在试图找出如何在rake中实现这一点,但找不到解决方案。以下是rake代码: SOURCES = Rake::FileList["src/*.c"] OBJECTS = SOURCES.ext(".o").pathmap("obj/%f") task :binary => OBJECTS do sh "g

C中strcpy()的分段错误(堆芯转储)错误

我正在尝试编写一个可以读取/写入rolodex信息的程序(默认情况下,该文件将命名为myRolodex)。但我认为这行:strcpy(文件名,“myRolodex”)导致我的GCC编译器出现分段错误(内核转储) 如有任何需要修复的帮助,将不胜感激 #include<stdio.h> #include <stdlib.h> #include<string.h> #include<stdbool.h> int main(int argc, char*

malloc()使用brk()还是mmap()?

c代码: 我得到一个警告提示: 格式“%p”要求参数类型为“void*”,但参数2的类型为“int” 问题1:为什么 在Imalloc(1024*1024)之后,程序中断似乎没有改变 以下是输出: printf("%10p\n", sbrk(0)); 问题2:进程启动时是否在堆上分配内存以供将来使用?或者编译器更改要分配的时间点?否则,为什么 [更新]摘要:brk()或mmap() 回顾TLPI并查看手册页(在TLPI作者的帮助下)后,现在我了解了malloc()如何决定使用brk()或

C 如何删除由msgget创建的消息队列

我使用msgget函数创建了消息队列。 下面的代码是它的一个片段 key_t msg_queue_key_id = msgget((key_t)MQ_KEY, IPC_CREAT | IPC_EXCL | 0666); if( msg_queue_key_id == -1 ) { char error_log[MAX_LENGTH]; sprintf(error_log, "failed to create message queue. errno = %d", errno);

C 在二进制文件中搜索模式

我需要在二进制文件中搜索二进制模式, 我怎么做 我尝试使用“strstr()”函数并将文件和模式转换为字符串,但它不起作用 (模式也是一个二进制文件) 这就是它所尝试的: void isinfected(FILE *file, FILE *sign, char filename[], char filepath[]) { char* fil,* vir; int filelen, signlen; fseek(file, 0, SEEK_END); fseek(sign, 0, SEEK_END

C 指针行为

这个程序要求用户填写一个表格,并询问他想要删除的值,然后创建一个没有该值的新表格 #include<stdio.h> #include<stdlib.h> main() { int *tab; int *p1,*p2; int nb,val,i; printf("Number of values for the table ? "); scanf("%d",&nb); tab=(int*)malloc(nb*sizeof(int)); // on allou

如何实现gpsd客户机(在C中)来获取纬度、经度和海拔高度?

我正在为支持GPS的Raspberry Pi编写一个数字处理数据记录C程序。我抓到了,它的示例应用程序cgps正确地显示了gps信息。我想使用它与守护进程接口,这样我就可以在我的应用程序中拥有所有方便的信息,但我很快就被它的API的复杂性压倒了 它的文档指向我看,例如代码,但有太多的耦合,我不能涉过所有。另一方面,页面上的C代码示例被剥离得无法使用 有人能给我指出一个可以解开这个谜团的类示例吗?可能是包含getCoordinates()函数的东西?我说得太快了。在浏览了其他SO问题后,我遇到了完

C程序的内存分配

节目 #include<stdio.h> int a=10; void main() { int i=0; printf("global = %p, local = %p\n",&a,&i); main(); } 上面的程序得到分段错误。因为,main递归地获取调用本身。下面是内存 分配给C程序 内存分配 __________________ _________________

用C语言列出环境变量

我已使用以下代码打印环境变量。因此,我怀疑主函数中的char*argv[]和char*envp[]参数之间是否存在关联 示例代码:- #include <stdio.h> int main(int argc, char *argv[], char *envp[]) { int index = 0; while (envp[index]) printf("%s\n", envp[index++]); } #包括 int main

限制C字符串中十六进制转义序列的长度

在字符串文字中,如何使用可解释为十六进制数字的文字字符立即跟随十六进制转义序列?例如,如果我写这个文字 "BlahBlah\x04BlahBlah" 。。。紧跟在'4'之后的'B'将被解释为十六进制转义的一部分,因为它是一个有效的十六进制数字 如果将'4'作为十六进制转义的最后一个字符,如何编写表示上述字符串的字符串文字 正如您所注意到的,当涉及字符串文本中的十六进制转义序列时,C是相当愚蠢的。通过使用字符串连接修复它,如下所示: "BlahBlah\x04" "BlahBlah" 在这样的

C中全局和局部范围内的静态变量

我有下面的C程序 #include <stdio.h> static int aa = 10; void func(){ static int aa = 9; printf("%d\n",aa); } int main() { func(); return 0; } 前两行表示两个变量都在数据段中,但第二行的2286表示什么。它表示什么?它表示从func范围内的局部静态变量aa,该变量仅由系统的动态加载程序初始化一

C 在一个大项目上运行

我在应用程序源代码的根目录(MPlayer-1.3.0)中运行了clangtidy(clangextra-Tools 6.0.0)。确切地说,我使用run clangtidy.pypython脚本,如下所示: run-clang-tidy.py -header-filter='.*' -checks='-*,readability-braces-around-statements' -fix 命令数据库也存储在根目录中名为compile\u commands.json的文件中。收集所有修复程序

C 为什么我在fork()之前使用dup2()时它不';不行?

我想做一个外壳,我想处理多个管道。我试图理解dup2()和fork是如何工作的。通常,fork()创建一个与父进程完全相同的新子进程。但是,当我在使用fork之前使用dup2时,它似乎无法处理我认为它应该做的事情。但是当我在子进程中使用dup2()时,它会工作。。。我不明白,因为通常会创建调用进程的副本 有人能解释一下原因吗 这不起作用: int fd = open("toto.txt", O_RDONLY); char str[10] = {0}; int test[2] = {0, 0};

C 如何使代码接受下一个单词而不仅仅是第一个单词?

在这段代码中,我面临的问题是,它只接受第一个单词,这个单词的末尾有一个逗号。该文件有许多结尾带有逗号的字,但它接受第一个字。例如,如果我提供了输入您的身份证号码的选项,该号码不是第一个单词。它可能是文件中的第二个或第三个单词,那么我将如何处理它 第一部分 #define STRING_SIZE 49 #include <stdio.h> #include <stdlib.h> #include <string.h> void RemoveNewLines(

C 如何清理内存块并将新变量放入其中?

我打算清理一块内存,然后在其中放入一个结构变量,并在新清理的内存中分配新值,但我无法从指针变量指向的地址启动结构变量(ptr=00D51590)。正如程序中红色箭头所示,我无法去除旧内存变量的残余 #include <stdio.h> #include <stdlib.h> #include <stdint.h> struct DataSet{ char data1; int data2; char data3; short

C 为什么我的字符的二进制值在使用%u时发生变化?

我们存储在一个有符号的字符中(在gcc中,默认字符是有符号的)1111111,意思是-1。但是我们用%u打印,所以printf应该看到0000 0000 1111 1111 这个数字,有两个补码或没有-是255。那么为什么我会得到(2^32-1)?似乎程序没有放前导零(如我所预期的),而是放前导零。首先,char可能有符号或无符号,这取决于编译器,因此不适合编写原始二进制文件的故事,请参阅 在您的情况下,它显然是有符号的,在这种情况下,值0b11111111=255将不适用。赋值时,255将以特

C语言中的开关盒菜单和终端窗口

对于某个班级项目,我不得不用C语言编写一个应用程序,它围绕着一个永远循环的开关/case菜单旋转。项目已经完成,但我还有一个问题: 每次菜单循环时,它都会显示在终端中以前的任何打印项下 是否存在这样一种方式,即菜单显示在一个终端窗口中,而菜单中选择的结果显示在另一个窗口中 理想情况下,我希望有一个菜单窗口和一个“程序”窗口 我希望这是有道理的 多谢各位 编辑:该应用程序应在Windows和Linux上都能正常运行。这是可能的,但并不容易。使用libtk这样的库在C程序中管理多个窗口。我认为,通过

  1    2   3   4   5   6  ... 下一页 最后一页 共 5041 页