我正在编写一个基于服务器和各种客户端的应用程序,但是我对send命令有一个问题。
每当我在客户端执行ctrl+c时,send操作就会终止正在运行的线程和进程(为了有多个客户端,我将一个线程设置为哪个线程)
如果客户端正确结束(执行关闭套接字),服务器不会死掉,但是当我在客户端上使用ctrl+c组合时,两者都会退出
如何防止send命令出现这种行为
提前感谢退房。您需要捕获并处理CTRL+C的信号,即SIGINT(终端中断信号)。为了关闭套接字连接并在CTRL-C上正确终止客户端程序,您可能需要为
我模模糊糊地记得以前在回答另一个问题时看到过这一点,但搜索并没有给出答案
我记不起什么是正确的方法来声明作为指针的变量。是:
Type* instance;
或:
虽然我知道在大多数情况下这两个变量都会编译,但我相信有些例子很重要,可能与在同一行中声明多个相同类型的变量有关,因此一个变量比另一个变量更有意义。这两个变量完全相同
但是,为了声明多个变量,如下所示:
int * p1, p2;
其中p1为指向int的指针类型,而p2为指向int的指针类型。如果希望将p2声明为指向int的指针,则
通用条款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
我在spoj一直在尝试这个问题,但我无法得到这个问题的最佳解决方案
我试过了
int main(){return !puts("Success");}
但它需要45个字符。有其他解决问题的建议吗?人们也用24个字符解决了这个问题
main(){puts("Success");}
24个字符
在C语言中,如果省略返回类型,它将隐式地int
如果main()不包含return语句,则main的返回值为0
更新:
好的,在每个版本的C中都可以省略main的返回,但是如果省略,只有C99将返回值
下面的代码有点问题。我已经看到了大量使用InternetReadFile保存到文件的示例。但我找不到一个,也找不到一个字符[]。我想添加szBuffer以获得holdBuff,然后将content设置为等于holdBuff
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <windows.h>
#include <WinInet.h>
HINTERN
可能重复:
我想知道在哪里可以找到使用的C代码,这样当我编写printf(“helloworld!”)时;在我的C程序中,我想知道它必须将该字符串打印到标准输出。我查看了一下,但在那里我只能找到它的原型int-printf(const-char*format,…),但找不到它内部的样子。。。您可以看到它通过stdout传递到vfprintf:
__printf (const char *format, ...)
{
va_list arg;
int done;
va_sta
我正在使用一个C语言的MCU,我有一个已经制作好的库,我想用它来构建我自己的应用程序。两者的区别在哪里:
编译.lib中的库文件,然后将我的应用程序(使用该库的应用程序)链接到该.lib,并将其编译到我的目标
只需创建一个项目,在其中导入所有文件(.c和.h)并将其编译到目标
这是一个非常基本和一般的问题,但我想澄清一下。编辑:答案是假设您是从软件工程的角度提出的
将库文件与应用程序代码分开是一种最佳做法。除了库文件和应用程序的静态和动态链接之外,库文件还应该包含逻辑/语义相关的代码。这种结构将
我一直在尝试用Perl 5和XML::LibXML(我现在维护)调试内存损坏问题。现在我得到的是:
shlomif@lap:~/progs/perl/cpan/XML/LibXML/bugs/perl-xml-libxml-bugs/XML-LibXML-reader-segfault$ make test
XML_CATALOG_FILES="`pwd`/sgml-lib/catalog.xml" perl find_ascii_quotes.pl index.html
*** glibc d
我正在从正在工作的机器中提取(从IT意义上讲)硬盘驱动器,需要调整注册表中它们的服务配置。在用于编辑注册表中服务的Windows APIOpenSCManager中,有一个文档稀少的lpDatabaseName参数。如果一个正在运行但未运行的Windows安装被安装为驱动器E:\,我可以使用它吗?(正在运行的Windows安装安装安装在驱动器C:\上)
我可以做些什么,例如OpenSCManager(空,“e:\Windows\WHAT\u是什么文件名”,SC\u MANAGER\u ALL\u
我试图使用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确实存在。我在谷歌上搜
我想知道队列消息是否为空。我使用了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)
标签: C
Clang
static-analysisabstract-syntax-tree
我正在用clang进行过程间数据流分析。目前,我正在使用libtooling解析源文件并调用AST visitor。
问题是如何为几个.c文件创建一个AST
我尝试使用ASTImport类,但它不支持导入某些AST节点。此外,我在创建和操作CompilerInstance时犯了错误,它在析构函数中崩溃
一个非常类似的选项是AsImportAction,但我不太清楚在这种情况下应该将哪些命令行参数传递给ClangTool
第三个选项是为每个.c文件创建ASTUnits,并在每个文件中查找定义。不清
我正试图倒转一根弦。我使用两个指针,一个指向字符串的开头,另一个指向字符串的结尾。然后我交换指针的值
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的示例
#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++)
我正在尝试编写一段代码来显示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
这就是代码
#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
我不熟悉pthreads,我正在努力理解它。我看到了如下一些例子
我可以看到main()被APIpthread\u exit()阻塞,我还看到了主函数被APIpthread\u join()阻塞的示例。我不明白什么时候用什么
我指的是以下网站-。我不知道何时使用pthread\u join()以及何时使用pthread\u exit()
有人能解释一下吗?此外,对于pthreads的良好教程链接也将不胜感激
#include <pthread.h>
#include <stdi
在C语言中,我将二进制数据从文件读入vardata,如下所示:
无符号字符*数据;
数据=malloc(大小);
int read_size=fread(数据,1,大小,fp);
我想在var数据前面加上文件的。我如何才能做到这一点?
它不是合法的C字符串,因为它是可能到处都是空字节的二进制数据
我知道要确保为它分配足够的内存,我只是不知道如何实际预处理它。定义自己的存储数据格式:
<uint64_t datalength><string name><char[d
标签: C
Mpi
matrix-multiplication
我正在研究一个问题,我需要在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
我试图编写自己的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.");
我目前正在做一个项目,在这个项目中我制作了自己的标记器。我的代码编译良好,但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
给定以下代码
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 <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()函数
这是我查找第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
摘自查尔斯·佩佐尔德的书:
几乎在每个Windows程序中都会看到这样的代码。洛沃德
和HIWORD是在Windows头文件中定义的宏
WINDEF.H。如果你好奇的话,这些宏的定义看起来
像这样
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
这两个宏返回字值,即16−位无符号
我只会在HIWORD定义中使用shift运算符。
像这样:
#defi
标签: C
portable-executable
我正在尝试获取.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
这一结构:
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函数?我目前不能保证它完全按照所示工作(我没有在这台计算机上设置环境),但这应该是正确的第一步:
导入外部。可
我需要在linux中使用套接字发送数据。我使用套接字发送数据,使用管道接收数据。当我尝试在函数中发送数据时:SendGTSMessage,我得到的发送数据值为空。
当我试图访问SendGTSMessage中的Bytessent时,我也遇到了分段错误错误
SendGTSMessage函数是从HandleGtsMessage函数调用的
任何见解都会有帮助
void* BeginGTSServer(void* arg)
{
char Buffer[1000];
我建立了自己的图书馆,名为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
标签: C
Gcc
undefined-behaviorgcc-warning
我最近在C上做了一次尝试,我在其中建议打开所有编译器警告
我想我会复制粘贴我确信gcc在编译OP代码时会给出的实际警告
除了它不起作用。我把它归结为这个测试用例,它也不起作用:
int main() {
int a; /* not initialised */
while (a) { /* warn me! */
a++;
}
return 0;
}
我会把最后一分钱押在gcc上说:
test.c: I
如何检测TCP连接中的死链接?
当有人拉动网络电缆时,会出现死链接,
关闭网络接口,打开WiFi或,
就我而言。。。拔下电源
保持活动仅适用于客户端,不适用于服务器。
服务器只是接收数据,从未使用TCP\u用户\u超时发送数据
将不工作,因为发送q将始终为空
我不想实现导致速度损失的应用层协议。
(不再有零拷贝)
一件有效的事情是发送oob数据,但你不应该再使用它了
在下面编写的测试之后,u将显示客户端连接将获得的c
在预期的短时间后关闭。
但服务器会认为它已连接,永远…到目前为止等待了3小时…
我需要对函数strtok()
假设我的分隔符是一个字符串,它是“SEP”
我有这样一个字符串:char str[100]=“var1SEPvar2SEPvar3SEPvar4”
会做strtok(str,“SEP”)
给我var1,var2,var3,var4
是的,如果var1、var2、var3和var4不包含字符串“SEP”中的任何字符,则结果将与您预期的一样
也就是说,该函数不搜索源字符串中的单词“SEP”。它将字符串“SEP”中的每个字符视为分隔符字符
否则,您应该使用标准C函数str
我有一个分段错误时,这段代码运行,但它编译没有问题。怎么了
#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
我想创建一个纹理系统,在这里我将添加到纹理,而不是覆盖它。我的纹理具有整数值(32位)。我想要的:例如,我有一个位为100的整数像素,我想加10,这样它就变成110
我当前的实现有两个纹理,一个是上一个纹理,另一个是要写入的纹理。读取先前纹理的值,然后使用新数据重写。有没有更好的方法可以做到这一点,因为使用两种纹理感觉效率很低 根据“附加”的含义,您可以使用添加剂混合:
然后,片段着色器的routput将被添加到颜色缓冲区的当前内容中。如果使用FBO渲染到纹理中,则可以直接添加到此纹理
您应该注
我有以下代码来计算输入的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
赫伯特·席尔德说:
在某些情况下,应该使用实函数来代替宏之类的函数,例如:代码大小要最小化,或者参数的计算不能超过一次
他所说的“一个参数不能被计算多次”是什么意思?让我们用一个宏来计算两个值的最大值:
#define MAX(a, b) ((a) < (b) ? (a) : (b))
然后将宏扩展为
int max = ((x++) < (y++) ? (x++) : (y++));
现在,如果调用宏作为
int sum = MUL(x + 3, y - 2);
然后扩展就变
从
使用命名曲线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
我正在尝试创建一个二叉搜索树,我了解其中的基本功能,但我只停留在一件事上。在我的主要职能中:
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语言制作简单的计算器。
但是它不起作用,谁能告诉我这个问题的解决方法吗。
我是编程新手,所以请原谅我犯的任何愚蠢的错误。
参数是否有问题,因为我输入了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,
我使用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
这是我尝试过的代码,它只生成数字和打印。我完全被困在如何访问行号和交换矩阵行的打印位置的问题上
#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;
我正在使用一台Ubuntu14.04机器进行二进制攻击练习(学习如何使用缓冲区溢出、编写外壳代码等)。
到目前为止,我已经能够通过gdbserver运行这些程序,这些程序专门用C编写,并用gcc编译,然后通过IDAPRO 6.8远程连接到它
然而,现在我正在尝试运行一个程序,它没有达到IDA中设置的断点。两者之间显然存在通信,我可以通过IDA执行程序,但它不会在我设置的任何断点处停止,包括程序执行流中肯定会被击中的断点。我在地址上设置了断点,所以不可用的调试信息不是原因。
而且,当我用gdb调试
我想找出3个数字的平均值。当所有数字都为正数时,该代码起作用,但当它们为负数时则不起作用。我能换什么
int mean3(int a, int b, int c) {
if ((a < 0) || (b < 0) || (c < 0)) {
if ((a == b) && (b == c)) {
return a;
} else if (((a%3!=0) && (b%3!=0))
我是一名编码初学者,希望听到您对本练习的以下解决方案的建议:
编写一个程序,循环提示输入long数据类型的正整数或零整数。然后,整数包含的位数(以十进制表示)应打印到标准输出。输入负数会立即停止程序。
输出示例:0有一个数字。999有3个数字。等等
我已经编写了下面的代码,根据我所做的测试,该程序完成了所有给定的任务。但是你怎么看呢?我怎样才能改进它
(我还认为,我不允许在任何c库中使用任何已完成的有用函数。它只是“普通”c编码而已。Idk如何描述它。)
(编程语言为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的新手,我正在跟随斯坦福德的CS107视频学习(我不是那里的学生)
如果有人感兴趣,请点击下面的链接
查看下面的strtok实现,我不知道为什么第一个if语句是这样写的:if(s==NULL&((s=p)==NULL))
到目前为止,我已经确定了以下内容:
1) 静态p是一个本地静态,因此它一旦成为一个令牌就持续存在
找到,并在找不到更多时重置为NULL
2) strtoken的后续调用将s作为NULL
char *strtok(char *s, const char *sep)
我正在管理一个链表,我使用int checker(…)函数
如果找到元素,则返回1,否则返回0。我还必须删除元素,所以在检查时,如果必须删除某个已找到的元素,我希望获取该元素的地址
我的想法是设置一个“删除模式”if(…),使checker返回元素的地址,而不是返回1然后使用它释放空间
现在我的问题是,在函数checker中编写return(int)pointeraddress,然后在外部像这样重新编写它,这会不会是一个大问题?我从来没有试过做这样的演员
someint=checker(..);
如何找到连接的套接字使用的接口。这样我就可以为不同的接口设置状态代码。我使用了下面的代码。但是我没有得到它
我在下面的测试代码中尝试了两种不同的方法,但都失败了。第一个连接到远程服务器,并使用ioctl和SIOCGIFNAME,但由于“没有这样的设备”而失败。第二个使用getsockopt和SO_BINDTODEVICE,但再次失败(它将名称长度设置为0)
关于这些失败的原因,或者如何获得I/F名称,有什么想法吗?编译后,将测试代码作为测试“a.b.c.d”运行,其中a.b.c.d是侦听端口80
我对C语言和代码都是新手,如果这是一个简单的问题,我很抱歉
我所要做的就是输入一些数字,让它们相加,然后用两种不同的方式打印总和。但是由于某种原因,printf(“%li”,z)代码行仅打印数字中的位数加上1
有人能给我解释一下为什么它会这样做吗?为什么什么是重要的,我其实并不太在意它的工作,因为我只是在玩耍和练习。谢谢
我的代码如下:
#include <cs50.h>
#include <stdio.h>
int main(void) {
long x =
我在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 页