Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
 C_IT技术博客_编程技术问答 - 「Fatal编程技术网」

发送套接字c ctrl+;c行为

我正在编写一个基于服务器和各种客户端的应用程序,但是我对send命令有一个问题。 每当我在客户端执行ctrl+c时,send操作就会终止正在运行的线程和进程(为了有多个客户端,我将一个线程设置为哪个线程) 如果客户端正确结束(执行关闭套接字),服务器不会死掉,但是当我在客户端上使用ctrl+c组合时,两者都会退出 如何防止send命令出现这种行为 提前感谢退房。您需要捕获并处理CTRL+C的信号,即SIGINT(终端中断信号)。为了关闭套接字连接并在CTRL-C上正确终止客户端程序,您可能需要为

在C中,声明指针的正确语法是什么?

我模模糊糊地记得以前在回答另一个问题时看到过这一点,但搜索并没有给出答案 我记不起什么是正确的方法来声明作为指针的变量。是: Type* instance; 或: 虽然我知道在大多数情况下这两个变量都会编译,但我相信有些例子很重要,可能与在同一行中声明多个相同类型的变量有关,因此一个变量比另一个变量更有意义。这两个变量完全相同 但是,为了声明多个变量,如下所示: int * p1, p2; 其中p1为指向int的指针类型,而p2为指向int的指针类型。如果希望将p2声明为指向int的指针,则

将字符串转换为整数的sscanf和atoi之间有什么区别?

通用条款4.4.4 c89 最好将字符串转换为整数值 我尝试了两种不同的方法atoi和sscanf。两种方法都能如期工作 char digits[3] = "34"; int device_num = 0; if(sscanf(digits, "%d", &device_num) == EOF) { fprintf(stderr, "WARNING: Incorrect value for device\n"); return FALSE; } 或者使用atoi de

C “最短打印方式”;“成功”;

我在spoj一直在尝试这个问题,但我无法得到这个问题的最佳解决方案 我试过了 int main(){return !puts("Success");} 但它需要45个字符。有其他解决问题的建议吗?人们也用24个字符解决了这个问题 main(){puts("Success");} 24个字符 在C语言中,如果省略返回类型,它将隐式地int 如果main()不包含return语句,则main的返回值为0 更新: 好的,在每个版本的C中都可以省略main的返回,但是如果省略,只有C99将返回值

InternetReadFile到C中的字符*

下面的代码有点问题。我已经看到了大量使用InternetReadFile保存到文件的示例。但我找不到一个,也找不到一个字符[]。我想添加szBuffer以获得holdBuff,然后将content设置为等于holdBuff #include <stdio.h> #include <tchar.h> #include <string.h> #include <windows.h> #include <WinInet.h> HINTERN

C语言中printf函数的代码

可能重复: 我想知道在哪里可以找到使用的C代码,这样当我编写printf(“helloworld!”)时;在我的C程序中,我想知道它必须将该字符串打印到标准输出。我查看了一下,但在那里我只能找到它的原型int-printf(const-char*format,…),但找不到它内部的样子。。。您可以看到它通过stdout传递到vfprintf: __printf (const char *format, ...) { va_list arg; int done; va_sta

C 编译库和在应用程序中仅使用其源文件的区别

我正在使用一个C语言的MCU,我有一个已经制作好的库,我想用它来构建我自己的应用程序。两者的区别在哪里: 编译.lib中的库文件,然后将我的应用程序(使用该库的应用程序)链接到该.lib,并将其编译到我的目标 只需创建一个项目,在其中导入所有文件(.c和.h)并将其编译到目标 这是一个非常基本和一般的问题,但我想澄清一下。编辑:答案是假设您是从软件工程的角度提出的 将库文件与应用程序代码分开是一种最佳做法。除了库文件和应用程序的静态和动态链接之外,库文件还应该包含逻辑/语义相关的代码。这种结构将

使用OpenSCManager加载未运行Windows安装的服务数据库

我正在从正在工作的机器中提取(从IT意义上讲)硬盘驱动器,需要调整注册表中它们的服务配置。在用于编辑注册表中服务的Windows APIOpenSCManager中,有一个文档稀少的lpDatabaseName参数。如果一个正在运行但未运行的Windows安装被安装为驱动器E:\,我可以使用它吗?(正在运行的Windows安装安装安装在驱动器C:\上) 我可以做些什么,例如OpenSCManager(空,“e:\Windows\WHAT\u是什么文件名”,SC\u MANAGER\u ALL\u

无法使用#include<;编译C代码;sys/times.h>;在锡温

我试图使用Cygwin安装/编译诸如igraph和Windows 7中的SNAP之类的库(还尝试了MinGW MSYS),但遇到了一些问题 我想我已经把问题缩小到了/configure给出的这个错误: checking sys/times.h usability... no checking sys/times.h presence... no checking for sys/times.h... no 在Cygwin中,/usr/include/sys/times.h确实存在。我在谷歌上搜

C Linux:检查消息队列是否为空

我想知道队列消息是否为空。我使用了msg_ctl()如下,它不起作用: struct msqid_ds buf; int num_messages; rc = msgctl(msqid, IPC_STAT, &buf); 我使用了这个窥视功能: int peek_message( int qid, long type ) { int result, length; if((result = msgrcv( qid, NULL, 0, type, IPC_NOWAIT)

AST用于多个源文件,并带有clang

我正在用clang进行过程间数据流分析。目前,我正在使用libtooling解析源文件并调用AST visitor。 问题是如何为几个.c文件创建一个AST 我尝试使用ASTImport类,但它不支持导入某些AST节点。此外,我在创建和操作CompilerInstance时犯了错误,它在析构函数中崩溃 一个非常类似的选项是AsImportAction,但我不太清楚在这种情况下应该将哪些命令行参数传递给ClangTool 第三个选项是为每个.c文件创建ASTUnits,并在每个文件中查找定义。不清

C 在反转字符串时交换指针值时出现分段错误

我正试图倒转一根弦。我使用两个指针,一个指向字符串的开头,另一个指向字符串的结尾。然后我交换指针的值 int main() { char *string = "stack overflow"; int len = strlen(string); char *end; char tmp; //temporary variable to swap values //pointer pointing at the end of the string

在C中使用varargs的一个示例

我发现了一个在C中如何使用varargs的示例 #include <stdarg.h> double average(int count, ...) { va_list ap; int j; double tot = 0; va_start(ap, count); //Requires the last fixed parameter (to get the address) for(j=0; j<count; j++)

C 装配AT&;T x86从文件中读取

我正在尝试编写一段代码来显示txt文件的内容。新文件中只存储了数字,每行一个数字(%d\n)。当前代码如下所示: movl $0 , 320(%ebp) #a pre reserved location on the stack for the first number that needs to be cleared first leal 320(%ebp), %eax #a pre-chosen location for the memory push %eax push $d

C 这个简单代码块的错误是什么?

这就是代码 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> struct num{ int a[5]; }; int main(){ struct num n; n.a[0]=56; FILE * fp=fopen("saman.txt","w+"); if(fp==NULL){ pri

C 在Linux中何时使用pthread_exit()以及何时使用pthread_join()?

我不熟悉pthreads,我正在努力理解它。我看到了如下一些例子 我可以看到main()被APIpthread\u exit()阻塞,我还看到了主函数被APIpthread\u join()阻塞的示例。我不明白什么时候用什么 我指的是以下网站-。我不知道何时使用pthread\u join()以及何时使用pthread\u exit() 有人能解释一下吗?此外,对于pthreads的良好教程链接也将不胜感激 #include <pthread.h> #include <stdi

C中无符号字符指针的前缀?

在C语言中,我将二进制数据从文件读入vardata,如下所示: 无符号字符*数据; 数据=malloc(大小); int read_size=fread(数据,1,大小,fp); 我想在var数据前面加上文件的。我如何才能做到这一点? 它不是合法的C字符串,因为它是可能到处都是空字节的二进制数据 我知道要确保为它分配足够的内存,我只是不知道如何实际预处理它。定义自己的存储数据格式: <uint64_t datalength><string name><char[d

C MPI中的矩阵乘法:第二个矩阵的列划分

我正在研究一个问题,我需要在MPI中通过将其中一个矩阵的列切片到不同的处理器来进行矩阵乘法。 A*B=C,B将被切片 我做了以下工作: MPI\u Bcast(A,n*n,MPI\u DOUBLE,0,MPI\u COMM\u WORLD)其中A分配给所有列组 MPI_Type_vector(n, n/p, n, MPI_DOUBLE, &tmp_type); MPI_Type_create_resized(tmp_type, 0, n/p*sizeof(double), &co

C 自定义strtok函数未按预期工作

我试图编写自己的strtok函数 char * toke(char * out, char * in, char * destr) { int place = 0; for(int i = 0; in[i] != '\0'; i++){ for(int d = 0; destr[d] != '\0'; d++){ if(in[i] == destr[d]){ printf("\nMatch.");

C代码似乎可以工作,但valgrind说数组没有初始化

我目前正在做一个项目,在这个项目中我制作了自己的标记器。我的代码编译良好,但valgrind给出了错误: ==2572== Conditional jump or move depends on uninitialised value(s) ==2572== at 0x4C2B308: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==2572== by 0x400FCB: strdup (Lex1

C 指针盒和圆图

给定以下代码 int main() { int z; int **x; int * y; x = (int**)malloc(sizeof(int*)); y = (int*)malloc(sizeof(int)); *y = 6; *x = y; // Point 1 z = 3; *x = &z; // Point 2 } 我将在点1和点2绘制变量的方框图和圆图 以下是我得到的第1点 以下是我对第2点的理解。 有人能确认我的方法和解决方案是

minix中存在错误的include语法错误 #包括 #包括 int mq_关闭(int队列) { 消息m; m、 m3_i1=队列; 返回(_syscall(PM_PROC_NR、MQ_CLOSE和&m)); }

当我在minix中更新我的库时,我得到了这个错误“错误包含语法错误”。。帮我解决这个问题。改变 #include <lib.h> #include <unistd.h> int mq_close(int queue) { message m; m.m3_i1= queue; return (_syscall(PM_PROC_NR,MQ_CLOSE,&m)); } #包括 进入 #包括 假设您使用安装了minix,您的main()函数

C 求第10000个素数

这是我查找第10000个素数的代码,但它非常慢,计算需要7秒 #include <stdio.h> #include <stdlib.h> long int prime (int n) { int i; for(i=2;i<n;i++) { if(n%i==0) return 0; } return 1; } int main() { int i=2,counter=0; w

C 我能';我不明白为什么HIWORD宏使用&;0xFFFF面具?

摘自查尔斯·佩佐尔德的书: 几乎在每个Windows程序中都会看到这样的代码。洛沃德 和HIWORD是在Windows头文件中定义的宏 WINDEF.H。如果你好奇的话,这些宏的定义看起来 像这样 #define LOWORD(l) ((WORD)(l)) #define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) 这两个宏返回字值,即16−位无符号 我只会在HIWORD定义中使用shift运算符。 像这样: #defi

C 获取PE文件的.text节头

我正在尝试获取.text部分的标题。似乎有效的方法是: // Get the DOS header. pDosHeader = (PIMAGE_DOS_HEADER) hMap; // Get header of first section pSectionHeader = (PIMAGE_SECTION_HEADER) ((DWORD) hMap + pDosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS)); // Get last secti

如何在没有c2hs或其他工具的情况下为该结构创建可存储实例?

这一结构: typedef struct Atom_ { float x; float y; float z; int col; } Atom; 对应于此类型: data Atom = Atom { pos :: V3 Float, col :: Int } 如何为Atom创建一个可存储实例,以便在Haskell上将Atoms发送给一个需要Atom的C函数?我目前不能保证它完全按照所示工作(我没有在这台计算机上设置环境),但这应该是正确的第一步: 导入外部。可

C Linux套接字/分段错误

我需要在linux中使用套接字发送数据。我使用套接字发送数据,使用管道接收数据。当我尝试在函数中发送数据时:SendGTSMessage,我得到的发送数据值为空。 当我试图访问SendGTSMessage中的Bytessent时,我也遇到了分段错误错误 SendGTSMessage函数是从HandleGtsMessage函数调用的 任何见解都会有帮助 void* BeginGTSServer(void* arg) { char Buffer[1000];

C 从我的makefile运行时忽略库

我建立了自己的图书馆,名为j(创造性)。 我将库放在makefile的目录中。 为了显示我的布局,下面是ls-R逐字吐出的内容: a.exe header libj.a makefile src ./header: jlib ./header/jlib: dstring.h eio.h ./src: main.c main.d main.o 当我运行gcc src/main.c-static-L-lj-Iheader-std=c11时,它的链接很好!然而,当我从make

GCC未初始化变量检查不使用“while”?

我最近在C上做了一次尝试,我在其中建议打开所有编译器警告 我想我会复制粘贴我确信gcc在编译OP代码时会给出的实际警告 除了它不起作用。我把它归结为这个测试用例,它也不起作用: int main() { int a; /* not initialised */ while (a) { /* warn me! */ a++; } return 0; } 我会把最后一分钱押在gcc上说: test.c: I

TCP死链路检测

如何检测TCP连接中的死链接? 当有人拉动网络电缆时,会出现死链接, 关闭网络接口,打开WiFi或, 就我而言。。。拔下电源 保持活动仅适用于客户端,不适用于服务器。 服务器只是接收数据,从未使用TCP\u用户\u超时发送数据 将不工作,因为发送q将始终为空 我不想实现导致速度损失的应用层协议。 (不再有零拷贝) 一件有效的事情是发送oob数据,但你不应该再使用它了 在下面编写的测试之后,u将显示客户端连接将获得的c 在预期的短时间后关闭。 但服务器会认为它已连接,永远…到目前为止等待了3小时…

C 斯特尔托克酒店

我需要对函数strtok() 假设我的分隔符是一个字符串,它是“SEP” 我有这样一个字符串:char str[100]=“var1SEPvar2SEPvar3SEPvar4” 会做strtok(str,“SEP”) 给我var1,var2,var3,var4 是的,如果var1、var2、var3和var4不包含字符串“SEP”中的任何字符,则结果将与您预期的一样 也就是说,该函数不搜索源字符串中的单词“SEP”。它将字符串“SEP”中的每个字符视为分隔符字符 否则,您应该使用标准C函数str

C 指针结构的问题

我有一个分段错误时,这段代码运行,但它编译没有问题。怎么了 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *fld[129]; } isomsg; void iso8583_init(isomsg *m) { int i; for (i = 0; i <= 128; i++) { m->f

C Opengl-附加到纹理

我想创建一个纹理系统,在这里我将添加到纹理,而不是覆盖它。我的纹理具有整数值(32位)。我想要的:例如,我有一个位为100的整数像素,我想加10,这样它就变成110 我当前的实现有两个纹理,一个是上一个纹理,另一个是要写入的纹理。读取先前纹理的值,然后使用新数据重写。有没有更好的方法可以做到这一点,因为使用两种纹理感觉效率很低 根据“附加”的含义,您可以使用添加剂混合: 然后,片段着色器的routput将被添加到颜色缓冲区的当前内容中。如果使用FBO渲染到纹理中,则可以直接添加到此纹理 您应该注

为CC_SHA256_更新优化了批量读取

我有以下代码来计算输入的sha_256,我想知道如何知道CC_SHA256_更新每次迭代的最佳数据块大小。它是一个常量值还是一个依赖于系统环境的变量 CC_SHA256_CTX sha256; CC_SHA256_Init(&sha256); const long bufSize = 32768; //how can i find the optimized size ? char* buffer = (char *) malloc(bufSize); int bytes

C 什么是论证评价?

赫伯特·席尔德说: 在某些情况下,应该使用实函数来代替宏之类的函数,例如:代码大小要最小化,或者参数的计算不能超过一次 他所说的“一个参数不能被计算多次”是什么意思?让我们用一个宏来计算两个值的最大值: #define MAX(a, b) ((a) < (b) ? (a) : (b)) 然后将宏扩展为 int max = ((x++) < (y++) ? (x++) : (y++)); 现在,如果调用宏作为 int sum = MUL(x + 3, y - 2); 然后扩展就变

OpenSSL ECDSA签名有效性

从 使用命名曲线prime256v1(又名p-256)创建给定SHA-256哈希值的ECDSA签名 第二步:使用ECDSA_do_sign()计算SHA-256哈希值的ECDSA签名: 或使用ECDSA_符号(): 第三步:使用ECDSA_do_verify()验证创建的ECDSA签名: 或使用ECDSA_verify(): 最后评估返回值: if (ret == 1) { /* signature ok */ } else if (ret == 0) { /* incorrect

如何在C中为二叉树创建新节点

我正在尝试创建一个二叉搜索树,我了解其中的基本功能,但我只停留在一件事上。在我的主要职能中: struct listing { int id; char agent[12]; int price; int size; //In square feet int numBeds; double numBaths; int yearBuilt; char address[30]; struct listing *left;

如何使用C中的函数制作简单的计算器?

我试过用C语言制作简单的计算器。 但是它不起作用,谁能告诉我这个问题的解决方法吗。 我是编程新手,所以请原谅我犯的任何愚蠢的错误。 参数是否有问题,因为我输入了3个,但在函数的参数中我只使用了2个。 “除法”功能不起作用 #include<stdio.h> #include<conio.h> int fun1(int *a,int *b); int fun2(int *c,int *d); int fun3(int *e,int *f); int fun4(int *g,

C 无法加密中文字符

我使用RSA\u public\u encrypt()对中文字符串进行加密。例如: char buf[] = "你好"; RSA_public_encrypt(s, buf, p, r, RSA_NO_PADDING); OpenSSL返回的错误字符串为: 错误:04068084:lib(4):func(104):原因(132) 它将失败。我想知道为什么 错误:04068084:lib(4):func(104):原因(132) 那太没用了。当您看到这样的字符串时,请使用openssl err

用C语言编写程序来生成此模式

这是我尝试过的代码,它只生成数字和打印。我完全被困在如何访问行号和交换矩阵行的打印位置的问题上 #include <stdio.h> int main(void) { int i,a[10][10],j,n,count=1; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { a[i][j]=count;

C 无法通过IDA在gdbserver中设置断点

我正在使用一台Ubuntu14.04机器进行二进制攻击练习(学习如何使用缓冲区溢出、编写外壳代码等)。 到目前为止,我已经能够通过gdbserver运行这些程序,这些程序专门用C编写,并用gcc编译,然后通过IDAPRO 6.8远程连接到它 然而,现在我正在尝试运行一个程序,它没有达到IDA中设置的断点。两者之间显然存在通信,我可以通过IDA执行程序,但它不会在我设置的任何断点处停止,包括程序执行流中肯定会被击中的断点。我在地址上设置了断点,所以不可用的调试信息不是原因。 而且,当我用gdb调试

C-计数

我是一名编码初学者,希望听到您对本练习的以下解决方案的建议: 编写一个程序,循环提示输入long数据类型的正整数或零整数。然后,整数包含的位数(以十进制表示)应打印到标准输出。输入负数会立即停止程序。 输出示例:0有一个数字。999有3个数字。等等 我已经编写了下面的代码,根据我所做的测试,该程序完成了所有给定的任务。但是你怎么看呢?我怎样才能改进它 (我还认为,我不允许在任何c库中使用任何已完成的有用函数。它只是“普通”c编码而已。Idk如何描述它。) (编程语言为C) #包括 内部主(空)

C 请求非结构或联合错误中的成员

我在网上搜索了上述错误,但人们主要谈论访问结构(->vs.)字段的错误方式。我试过了,但还是收到了同样的错误。 我有两个结构: struct Node_ { int num; G12_t* G12; }node_t; struct G12_{ int level; int size; G12_t* next; }G12_t; 当我想访问节点中G12_t的level字段时,我得到了上面的错误。我可以访问以下级别字段: node_t* pNode; pN

C 试图理解strtok实现中的代码

我是一个非常c的新手,我正在跟随斯坦福德的CS107视频学习(我不是那里的学生) 如果有人感兴趣,请点击下面的链接 查看下面的strtok实现,我不知道为什么第一个if语句是这样写的:if(s==NULL&((s=p)==NULL)) 到目前为止,我已经确定了以下内容: 1) 静态p是一个本地静态,因此它一旦成为一个令牌就持续存在 找到,并在找不到更多时重置为NULL 2) strtoken的后续调用将s作为NULL char *strtok(char *s, const char *sep)

将指针强制转换为int以从C中的int函数返回安全吗?

我正在管理一个链表,我使用int checker(…)函数 如果找到元素,则返回1,否则返回0。我还必须删除元素,所以在检查时,如果必须删除某个已找到的元素,我希望获取该元素的地址 我的想法是设置一个“删除模式”if(…),使checker返回元素的地址,而不是返回1然后使用它释放空间 现在我的问题是,在函数checker中编写return(int)pointeraddress,然后在外部像这样重新编写它,这会不会是一个大问题?我从来没有试过做这样的演员 someint=checker(..);

C 如何查找连接的套接字使用的网络接口

如何找到连接的套接字使用的接口。这样我就可以为不同的接口设置状态代码。我使用了下面的代码。但是我没有得到它 我在下面的测试代码中尝试了两种不同的方法,但都失败了。第一个连接到远程服务器,并使用ioctl和SIOCGIFNAME,但由于“没有这样的设备”而失败。第二个使用getsockopt和SO_BINDTODEVICE,但再次失败(它将名称长度设置为0) 关于这些失败的原因,或者如何获得I/F名称,有什么想法吗?编译后,将测试代码作为测试“a.b.c.d”运行,其中a.b.c.d是侦听端口80

C 打印位数而不是实际值

我对C语言和代码都是新手,如果这是一个简单的问题,我很抱歉 我所要做的就是输入一些数字,让它们相加,然后用两种不同的方式打印总和。但是由于某种原因,printf(“%li”,z)代码行仅打印数字中的位数加上1 有人能给我解释一下为什么它会这样做吗?为什么什么是重要的,我其实并不太在意它的工作,因为我只是在玩耍和练习。谢谢 我的代码如下: #include <cs50.h> #include <stdio.h> int main(void) { long x =

C 已声明但从未定义的错误函数

我在codeVision AVR中为我的c项目添加了一个库。当我想使用它的函数时,会收到以下错误: 函数“function name”已声明但从未定义。 这是我的密码: #include "pid.h" #include <mega32.h> PidType _pid; void main(void) { //some uC hardware initializing codes which are removed here to simplify code PI

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