C .a中的对象文件不包括在.so中

我创建了一个.c文件,该文件正在转换为.o文件,以及大约300个其他.c文件,并包含在.a静态库中。这个库和其他许多库一起被用来创建。所以动态库。通过对.a和.so文件进行nm分析,我发现由于某种原因,.c文件中定义的符号存在于.a文件中,而不存在于.so文件中。我想不出发生这种事的理由。谁能帮帮我吗?创建这两个二进制文件的步骤如下: gcc -fvisibility=hidden -c foo.c -o foo.c.o ar cr libbar.a foo.c.o ... gcc -fvisi

在ubuntu的c语言中使用SYS_getcwd

我试图使用以下代码获取ubuntu中当前的工作目录: #include<stdio.h> #include<unistd.h> #include<sys/syscall.h> #include<stdlib.h> int main(){ char *str = malloc(100); str=(char *) syscall(SYS_getcwd); printf("%s",str); return 0; }

Linux中通过SIOCGIFCONF轮询接口名称

我正在尝试轮询网络设备名称。我从不同的片段中拼凑出来 但我的输出只是胡言乱语 #include <stdio.h> #include <stdlib.h> #include <net/route.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #define BUFLEN 1024 #define SEQ 9999 int

mmap、msync和linux进程终止

我想使用mmap在Linux下运行的C程序中实现程序状态某些部分的持久化,方法是使用mmap()和MAP_共享标志集将固定大小的结构与已知的文件名相关联。出于性能原因,我不希望调用msync(),也不会有其他程序访问此文件。当我的程序终止并重新启动时,它将再次映射同一个文件,并对其进行一些处理,以恢复终止前的状态。我的问题是:如果我从未在文件描述符上调用msync(),内核是否会保证所有对内存的更新都会写入磁盘,并且即使我的进程以SIGKILL终止也可以恢复?此外,即使我的程序从不调用msync

C 是否可以通过编程方式获取共享库中函数的签名?

标题很清楚,我们可以通过dl_open等加载库 但是如何才能获得其中函数的签名呢?不,这是不可能的。函数的签名在运行时并不意味着什么,它是编译时编译器用来验证程序的有用信息。你不能。要么是库在标头中发布了一个公共API,要么需要用其他方法知道签名。 < P>下层函数的参数取决于堆栈框架中有多少堆栈参数以及如何解释它们。因此,一旦函数被编译成目标代码,就不可能得到这样的签名。一个遥远的可能性是反汇编代码,并读取其功能如何工作,以了解参数的数量,但类型仍然很难或不可能确定。总之,这是不可能的。此信息

c程序设计中的字符串

为什么我不能编译包含代码的程序 char name[10]; name= "Rajesh"; 而我可以用 char name[10]="Rajesh"; 不能使用赋值将值赋值给字符串数组。 在C语言中,只能初始化数组而不能分配数组,字符数组也不例外 您需要使用字符串复制功能,如strcpy或strncpy等 但是,您可以将字符串封装在结构中并进行模拟: typedef struct Yourstring Yourstring; struct Yourstring { char

C 有没有一种方法可以让printf()正确地打印出一个数组(比如浮点数)?

我相信我已经仔细阅读了整个printf()文档,但没有找到任何方法将其打印出来,例如,10个元素的浮点数组的元素 例如,如果我有 float[] foo = {1., 2., 3., ..., 10.}; 那么我想要一个单独的声明,比如 printf("what_do_I_put_here\n", foo); 可以打印出以下内容: 1. 2. 3. .... 10. 在vanilla C中有没有这样做的方法?您必须循环遍历数组和printf()每个元素: for(int i=0;i<

如何读取到/proc文件的结尾

我有/proc文件。我不理解read函数的一些参数。 读取函数如下所示: int procfile_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data) if (offset > 0) return 0; 我不知道如何使用偏移参数 一些示例使用如下偏移量参数: int procfile_read(char *buffer, char **b

C 不同硬件架构的系统调用?

我假设代码将用C语言编写 我研究了编译器是否遵循代码(词法分析、语法分析等),并将代码转换为汇编代码,然后汇编程序将代码组装成机器代码,最后在硬件上执行。 因此,我怀疑为系统调用编写的代码是否可移植,也就是说,如果我将在某些硬件上编译相同的代码,该代码会运行吗 我说的唯一依赖于体系结构的部分是编译器,并且在其他体系结构上编译后的系统调用可以正常运行,这对吗 系统调用取决于操作系统和体系结构。大多数情况下,如果架构或操作系统不同,则应重新编译程序 例如,用于malloc()的sbrk和brk系统调

用C语言编写一个简单的实数输入离散傅里叶变换

所以我试图用C语言编写离散傅里叶变换来处理真正的32位浮点wav文件。它一次读取2帧(每个通道一帧,但出于我的目的,我假设它们都是相同的,所以我使用帧[0])。该代码应该通过探测频率20,40,60,…,10000来写出输入文件的振幅谱。我在输入帧上使用汉宁窗口。如果可以的话,我想避免使用复数。当我运行这个程序时,它给了我一些非常奇怪的振幅(大多数振幅非常小,与正确的频率无关),这让我相信我在计算中犯了一个根本性的错误。有人能提供一些关于这里发生的事情的见解吗?这是我的密码: int windo

C fork()为什么不是无限输出

为什么 int main(...) { fork(); printf("hello again\n"); exit(0); } 不创建进程的infinte编号? 我的理解如下:主进程创建一个childprocess,子进程创建另一个子进程,依此类推。执行在父进程和子进程中的fork之后继续,它不会重新启动程序。父进程在调用fork()的执行点被“克隆”,这两个过程都是从那里开始的。子进程不会通过再次调用main()重新开始。您必须将fork()放入一个无

C 每次结构调用使用一次指向结构的函数指针

我有一个包含几个函数指针的结构。通用接口在头文件中创建 头文件 typedef struct { void (*Start)(void); void (*ByteWrite)(uint8_t *pBuffer); // Modifies I2C buffer uint8_t (*ByteRead)(uint8_t *pBuffer); void (*ArrayWrite)(uint8_t *pBuffer); uint8_t (*ArrayR

指向C中字符串的字符数组的指针

我在一次初级职位的面试中被问到这一点,我很想知道为什么你需要两个指针。那是一次电话采访,他让我写了下来 字符**a[5] 问我这是什么 他告诉我,这是一个指向5个字符数组的指针,以便生成一个5个字符的字符串。我只是想理解为什么它是char**a[5],而不是char*a[5] 如果您将左右阅读规则应用于此。。。a是指向char指针的五个指针的数组。这是指向char指针的五个指针的数组。这里没有直接字符。如果他说这是一个指向五个字符数组的指针,要么你写错了,要么他写错了,要么两者都写错了。描述他的

如何更改C中argv的内容?

我一直试图在网上搜索,但仍然找不到任何关于它的信息 我想增加文件名 int main(int argc , char *argv[]){ char charArray = {argv[1]}; char * string[] = {"-0001.c"}; int i = 0; strcat(charArray[0] , string[0]); puts(charArray[0]); return 0; } 因此,正如预期的那样,我按照 /文件测试 输出是 测试-0001.c 如果我

C 如何在结构数组中使用数组变量?

我试图理解结构数组的概念,并提出了一个问题。希望你能帮助我 好的,那么,我面临的问题是如何在结构数组中声明和使用数组变量(即接受和显示值) 此示例代码可以直观地帮助您理解我的问题: #include<stdio.h> struct node{ int roll; char name[10]; int grades[5]; // Accepts 5 grades for each student }; int main() { struct nod

将_func__视为字符串文字而不是预定义的标识符

我正在使用gcc编译C99代码。我想写一个宏,它将返回一个包含函数名和行号的字符串 这就是我所拥有的: #define INFO_MSG __FILE__ ":"__func__"()" 但是,当我编译试图使用此字符串的代码时,例如: char buff[256] = {'\0'} sprintf(buff, "Something bad happened here: %s, at line: %d", INFO_MSG, __LINE__); printf("INFO: %s\n", bu

C 如何使用libmosquitto编译

我正在尝试编译libmosquitto网站(底部)上提供的代码示例: 我使用的是Ubuntu 12.04,我已经安装了libmosquitto1和libmosquitto1开发包。在安装它们之前,我添加了MOSQUITO存储库: sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa sudo apt-get update 我正在尝试编译以下示例: gcc -lmosquitto mosquito.c -o mosquito 但我得到

C 使用WiFi控制LED灯泡

我希望通过智能手机应用程序使用WiFi连接打开或关闭LED灯泡。我尝试了各种网站,但找不到合适的答案。我只是想知道如何将WiFi接收器与灯泡中的微控制器连接,然后通过安卓或iOS中的应用程序进行控制。 谢谢这个问题我觉得太宽泛了,尽管我想给你一个想法,你需要什么,你的方法应该是什么。 您需要两个端点,一个在iPhone上,另一个在led设备上。在led设备中,您需要一个运行在微控制器上的程序,该程序将通过wifi适配器接收和发送数据包,并能够相应地处理这些数据包。 在另一端,iOS应用程序将创建

国际象棋游戏用C,对齐问题

首先,我不知道“对齐”这个词是否正确地描述了我需要帮助的内容,这就是为什么我从控制台应用程序提供图像 我想知道是否有办法使零排列整齐。我提供给你我的代码 #include <stdio.h> #include <stdlib.h> int emptynes(int table1[16],int table2[16],int zero[32]) { int i,k=1; for(i=0;i<16;i++) { table1[

什么使SPI比I2C协议更快

我知道I2C和SPI通信的基本原理。因为两者都是同步协议。我想知道是什么让SPI比I2C快。如果我使用I2C没有错的话,我们可以使用400kbps,而在SPI中,我们也可以达到10mbps。是因为硬件的改变吗? 这个问题是在一次采访中问我的。。如果我错了,请纠正我 I2C非常复杂,在总线上支持多个主控器。这会在总线协议中造成很大的开销,每个字节都会有一个ACK,并且会故意延迟以仲裁对总线的访问。此外,还设置了最大总线速率,原始规范中为100 kHz,如今为400 kHz,额外的10 kHz低速和

退格\b在C格式字符串中\n之前不起作用

在忽略换行符之前的字符串末尾的C字符串中的退格转义字符(在Mac OS X终端中) 为什么会出现这种情况?如果您使用\n\b,它将可以随心所欲。从目前的情况来看,可能还有更多的问题。C99,§5.2.2/2字符显示语义: \b(退格)将激活位置移动到当前行上的上一个位置。如果 激活位置位于线的初始位置,即显示的行为 设备未指定 因为它只指定移动“活动位置”,所以我想它实际上不必擦除任何内容。该\b只会将光标移回一个字符,但不会删除其中的字符。printf将打印出从开始到当前光标所在位置的所有内容

C 如何从递归函数内部写入文件

在这里编程。请检查下面的代码。。。这是一个给定词汇表的蛮力组合生成器。它不是编译。你能指出错误吗?如果可能,请告诉我在这种情况下如何为文件和终端输出编写单独的函数。谢谢你的时间 #include <stdio.h> #include <string.h> #include <stdlib.h> static const char alphabet[] = "abcd";//vocabulary static const int alphabetSize = s

C 获取代码中的运行时错误

获取给定代码中的运行时错误 初始化变量 #include <stdio.h> #include <stdlib.h> int main(){ int k; int n; int i; int *a; int b; int t; int f=0; scanf("%d",&t); while(t--){ scanf("%d %d",&n,&k); 这个 应该是 scanf("%d",&b); 应该是: scanf("%d",&

如何将.c文件从windows重新格式化为UNIX?

我在Windows上编写了一个带有代码块的程序,当我试图在Unix终端上编译它时,它会显示多个错误和警告。我几乎可以肯定这与这两个系统之间的文本格式差异有关 有时候,当你从网站等复制代码时,也会发生类似的事情 我的问题是如何重新格式化.c文件,以便能够在Unix终端中使用cc命令编译它,而不必重写整个程序 C程序源文件的文本格式应该是无关的。除非文件的编码方式使编译器本身无法读取(例如,您用汉字而不是ASCII字符编写) 您没有提供源文件、在Windows下编译时出现的错误、在Unix下编译时出

C 将WAV转换为base64

我有一些wave文件(.wav),我需要将它们转换为base64编码的字符串。你能指导我如何在Python/C/C++中实现这一点吗?Python 最简单的方法 from base64 import b64encode f=open("file.wav") enc=b64encode(f.read()) f.close() 现在enc包含编码值 您可以使用稍微简化的版本: import base64 enc=base64.b64encode(open("fil

C 我能';无法为此结构分配内存

我有这个结构和函数: typedef struct{ char *maze_size; char *trophy; int time_max; char *moves; }gameHistory; 该函数接收指针gameHistory*gameHistoryReaded,以保留内存,但不起作用 void loadGameHistory(char fileName[], gameHistory *gameHistoryReaded, i

为什么C11标准没有';是否删除不安全的strcat()、strcpy()函数?

C11&C++14标准删除了本质上不安全的函数gets(),因为它不执行边界检查会导致缓冲区溢出,从而导致安全问题。那么为什么C11标准不删除strcat()&strcpy()函数呢strcat()函数不检查第二个字符串是否适合第一个数组strcpy()函数也不包含检查目标数组边界的规定。如果源数组的字符数超过目标数组所能容纳的字符数,该怎么办?程序很可能在运行时崩溃 那么,如果这两个不安全的函数完全从语言中移除,那不是很好吗?为什么它们仍然存在?原因是什么?只有像strncat()、strnc

C 什么是「;抽象语义学;及;实际语义“;?

这句话见于C11的最终草案N1570(5.1.2.3-8): 每个实现都可以定义抽象语义和实际语义之间更严格的对应关系 “抽象语义和实际语义”似乎还没有给出定义。草案解释了执行应该如何进行,并且该描述基于C抽象机,因此它定义了一个抽象语义。但是可以定义这个草案的一个实现,它可能不同于这个抽象语义,这是实际的语义。5.1.2.3-6说明了一致性实施所需的内容: 一致性实施的最低要求是: -对易失性对象的访问严格按照抽象机器的规则进行评估 -在程序终止时,写入文件的所有数据应与根据抽象语义执行程序所

C-在控制台窗口中设置更快的像素

我正在寻找一种在控制台窗口(应用程序)中绘制像素的方法。SetPixel/SetPixelV的通用方法非常慢 我想做一个最小的静态蛇游戏。(如果你按一个键,蛇就会移动)。我的地图尺寸是200x200 我对点结构的数组执行操作。我的点结构只保存作为无符号字符铸造的RGB值。(3个字节,point.r point.g,例如point map[width*height])使用open mp优化操作 我已经把它填成白色,在操场上加了一个20像素的边框。其余的都不是问题 但是在我的机器上,调用SetPix

C 学习矢量量化不起作用

我希望这里有人能帮助我: 我正试图实现一个神经网络来发现数据簇,它被表示为2D簇。我试图遵循上所述的标准算法:我寻找每个数据点的最小距离,并向数据点更新该神经元的权重。当总距离足够小时,我停止这样做 我的结果是找到大多数簇,但在视图上是错误的,虽然它计算了一个永久距离,但不再收敛。我的错误在哪里 typedef struct{ double x; double y; }Data; typedef struct{ double x; double y; }Neur

C 通过管道does';将字符从一个程序发送到另一个程序;nt工作

我正在尝试运行执行以下操作的程序: Fork将启动另一个编译的c程序的子进程- 抽出 父进程然后等待用户从键盘输入 然后,输入通过管道传递到draw.out程序 draw.out从管道中读取并使用输入 下面是两个程序,draw.out运行良好(俄罗斯方块游戏),但没有从管道中获取输入,我的错误是什么 文件1: #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <s

C-收获子过程和背景

为了收获却似乎无法摆脱僵尸的过程。那我该怎么做才能收获呢 另外,我不确定我是否在这里做后台工作。您的代码错误: while(waitpid(-1, 0, WNOHANG) >= 0){} pid\u t pid; 如果((pid==fork())==0){//这里有问题 if(execvp(arg[0],arg)未定义行为的结果初始化的pid(之后,将此比较结果与0进行比较) 你应该用if((pid==fork())==0){替换if((pid=fork())==0){Changeif

获取辅助存储大小的c代码

我需要一种简单的方法来获取linux(守护进程)c代码中的辅助存储详细信息(如总大小、已用空间和可用空间) 这就是我尝试过的事情 statvfs-不知道如何获取磁盘详细信息而不是文件 在c代码中使用system(“df-h--total | grep total>disk.stat”),然后读取文件 但是上面涉及的文件写入和读取是无效的,因为此c代码是一个守护进程,它将连续轮询系统详细信息,作为图形生成的输入 如果没有其他方法,请告诉我一个简单而快速的ipc机制,并举例说明此bash和c代码

我可以使用malloc模拟strcpy吗?

我试图从头开始为一个类创建strcpy函数。虽然我可以使用for循环并复制单个字符,但我认为我可以使用malloc和指针进行交换,以提高效率。这是我的代码,但我已经得到了很多令人困惑的错误 void notStrcpy(char s1[], char s2[]) { //copies string s1 into s2 char *s3 = (char *) malloc(strlen(s1)); //s3 is now an alias of s1 s2 = *s3;} //dereferen

在C中从指针列表中设置指针内容

我现在对指针很困惑,所以我希望有人能帮助我在哪里出错 所以我想有一个指向某些结构的指针列表,一个变量有指向所有结构的指针。该列表还应在以后根据设置的某些条件进行更改。这里只是一个简单的例子: typedef struct { int a; } path; typedef struct { path** all_paths; } has_them; int main(int argc, char** argv){ path* eno = malloc(sizeof(path));

在C编程中检索数组值。如何修复这些错误?

这是我的第一篇文章,所以如果我没有正确地做到这一点,我很抱歉。但是,我对C编程相当陌生,我遇到了一个障碍。我们得到了一个.exe文件来从头开始构建代码。我已经走了这么远,但是我很难通过检索这些名字。它正在存储它们,或者看起来是这样,但是当我的值设置为3时,它会从前两个的所有三个名称中提取,并且只正确显示第三个名称。姓氏总是正确的。我在下面提供了一个屏幕截图,显示了我的问题。我很快就要完成了,但这一步我过不了。任何帮助都将不胜感激 #include <stdio.h> #include

ASturct arr[]和ASturct*arr[]之间的差异

ASturct arr[]和ASturct*arr[]之间有什么区别 ASturct array[] ASturct * array[] 谢谢你的回答 ASturct array[] 上面一个是ASturct类型的数组 ASturct * array[] 这是指针数组(属于ASturct类型)。您似乎对数组和指针的工作方式有一个基本的误解 让我们举一个非常简单的例子: int a = 1; int b = 2; int c = 3; int array1[3] = { a, b, c

如何用pthread和lpq编译C代码

我一直在尝试编译一个非常简单的代码,其中包含postgres、pthread和mutex。现在,当我单独使用pthread时,一切都很好,当我单独使用postgres时也是如此!但是当我试图编译完整的代码时,我遇到了愚蠢的问题 gcc -o pleaseWork uploadData.c -I/usr/include/postgresql -lpthread -lpq 我得到: /tmp/ccitU5mG.o: In function `increaseQueryNum': uploadDa

C函数不工作

我是C语言编程新手,我尝试用一个函数来交换数组的变量,但我就是不能让它工作,我不知道为什么。你能帮帮我吗?先谢谢你 代码如下: #include <stdio.h> void inplace_swap(int *x, int *y){ if (x!=y){ *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; } } void reverse_array(int a[], int

在C89中添加指向大小的指针

首先,我知道: 现在假设我有这个数组: size_t count = some_value(); struct info *pinfos = malloc(count * sizeof(struct info)); 我想用变量“导航”它 struct info *p; 我可以用这个代码检查限额吗 p < (char*)pinfos + count*sizeof(struct info) - 1 p

C 编译器id上的错误返回1退出状态

所以我是c新手,我试图写一个函数,找到数组的中值,然后显示它。我得到一个错误,说id返回了1个退出状态和未定义的引用来显示中间值。我试着去查,但没有一篇文章适用于这一点。有人能看一下并告诉我出了什么问题吗?(这段代码有更多内容,但我刚刚发布了我遇到错误的部分) #包括 #定义最大值10 void getdata(int数组[]); int显示最大值(int数组[]); int显示最小值(int数组[]); int displayaverage(int数组[]); int显示范围(int数组[])

C 指令级有符号数模

阅读之前关于gcc和clang中的有符号数字模计算的不同实现的有趣讨论,我提出了一个问题(讨论中未讨论) 究竟为什么要实施这一点: if(num%2==1) 从这个开始(在clang和gcc中类似): 为什么我们从((num>>31)+num)开始?为什么要使用MSB并将其添加到数字中?这是从哪里来的?负数%2的结果是负数余数,除法在C中向0取整。&1仅适用于正数 因此,编译器生成代码,将符号位数字相加-实际上是将负数增加1,这样-1在最后一位有0,然后-2在最后一位有1,-3又有0。。。然后,

C Valgrind“;“内存错误”;具有复杂数据类型

我写了一个C程序,它是带有链表的堆栈的通用实现。我尝试反转一些字符串、整数数组、双数组,效果很好。我使用valgrind检查内存泄漏和错误,但仍然没有这样的问题。但是,当我尝试反转复杂数据类型的数组(例如struct类型的数组)时,即使没有泄漏且输出正确,也会出现内存错误 所以 我做错了什么 大小为8的无效写入意味着什么 另外,地址0x4e444d8在分配了大小为8的块之后是0字节,这意味着什么 //以下是valgrind的错误日志: ==74356== HEAP SUMMARY: ==7

C 我返回双字符的方式正确吗?

我目前正在练习malloc,并试图用c创建一个字符串数组。 以下是我的小程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int read_arguments(char*s[]); char** copy_argv(char*s[]); void free_char_ary(char*s[]); int main(int argc, char* argv[]) { int co

C 相同的srand种子在不同的计算机上产生不同的值

这段代码每次运行时都会生成相同的值。但是完全相同的代码在我朋友的电脑上产生不同的值。原因可能是什么,或者我做错了什么 #定义尺寸100 内部主(空){ srand(14012021); 对于(int i=0;i

C 编写一个函数,将指向任何函数的指针作为参数

我在用C语言编写指针。我必须编写一个程序,使用函数和指针对一个数字(sqrt、sin、exp)进行3次运算。我已经这样做了,但是我有一个问题,编写一个函数,该函数以指向上述任何函数的指针+浮点数作为参数,返回相应计算的结果。 在主功能中,我附加了不带此功能的工作代码。我不知道如何编写这个函数,我用这段代码编写了我的try。在此,我附上我编写的代码: #include <stdio.h> #include <math.h> double square(double *);

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