警告:fopen()调用

嗨,我正在用linux下的stdlib编程。 gcc针对以下代码行发出以下警告,任何想法为什么会这样? FILE *fd; if ( fd = fopen( filename, “rw” )== NULL ) { 并且警告是: warning: assignment makes pointer from integer without a cast. 如何实现这一点,根据stdlib文档,fopen的返回类型是FILE *。 那么为什么还有警告呢?有什么想法吗? – 提前致谢 –

#include 与C ++程序中的#include

在C ++程序中包含前者而不是后者需要考虑哪些因素? 我总是包括math.h , stdlib.h和从不cmath , cstdlib等我不明白后者甚至存在的原因,有人可以请赐教吗?

指针数学与数组索引

我知道这已经过了很多次,但是今天我遇到了一个案例,震惊了我对指针数学/数组索引的理解。 正如我总是理解的那样,&mybuff [10]和(&mybuff + 10)是重新记忆相同内存的方法。 但是我花了一个上午打架的案例: memcpy(&mybuff+10,&in,8); 当使用优化编译时,溢出缓冲区,并且在编译用于调试时工作得很好。 而在同一时间, memcpy(&mybuff[10],&in,8); 在这两种情况下工作得很好。 非常感谢任何想法或指针。

你如何找到两点之间的相对影响?

double computeHeading(double latitude1, double longitude1, double latitude2, double longitude2) { double degToRad = PI / 180.0; double phi1 = latitude1*degToRad; double phi2 = latitude2*degToRad; double lam1 = longitude1*degToRad; double lam2 = longitude2*degToRad; double x,y; x = cos(phi2) * sin(lam2-lam1); printf(“X is %lf\n”, x); y = cos(phi1) * sin(phi2) – sin(phi1) * cos(phi2) * cos(lam2-lam1); printf(“Y […]

如何为GCC设置Visual Studio代码编译器/调试器?

我在Visual Studio Code中用C编程,但我无法编译,因为VSC只提供了三个内置的编译器–Node.js,C#Mono和Extension开发。 经过一番挖掘后,我遇到了Visual Studio Marketplace 。 这似乎是正确的事情,但只有四种不常见的语言。 我只能假设内置了C调试支持,我无法找到它或者我做错了。 我试图创建一个新的launch.json(似乎保存每个文件的编译/调试设置的清单)并手动输入我拥有的GCC二进制文件,但这并没有结束。 我目前无法通过命令提示符手动编译我正在处理的C源文件。 如果有人能指出我正确的方向,那将会有所帮助。 tl; dr – 在Visual Studio Code中调试C的任何人的帮助 Windows 8,如果重要的话 干杯!

如何检测C中的变量uninitialized / catch段错误

我目前有一个程序,我需要测试作为参数传入的变量是否未初始化。 到目前为止,似乎在C中这很难做到,所以我的下一个想法是调用信号处理程序来捕获段错误。 但是,我的代码在尝试访问未初始化的变量时没有调用信号处理程序,如下所示: void segfault_sigaction(int signal, siginfo_t *si, void *arg) { printf(“Caught segfault at address %p\n”, si->si_addr); exit(0); } void myfree(void*p, char * file, int line){ struct sigaction sa; memset(&sa, 0, sizeof(sigaction)); sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction; sa.sa_flags = SA_SIGINFO; sigaction(SIGSEGV, &sa, NULL); char up = *((char*)p); //Segfault 编辑:在Linux系统上

结构中的“警告:空声明中无用的存储类说明符”

typedef struct item { char *text; int count; struct item *next; }; 所以我有这个结构与上面定义的节点,但我得到下面的错误,我无法弄清楚什么是错的。 警告:空声明中无用的存储类说明符};

将String拆分为String数组

我一直在为arduino编程,但今天我遇到了一个问题,我无法用我非常有限的C知识来解决。 这是怎么回事。 我正在创建一个将串行输入发送到arduino(deviceID,command,commandparameters)的pc应用程序。 这个arduino将把这个命令通过RF发送给其他arduino。 根据deviceID,正确的arduino将执行命令。 为了能够确定我想在“,”上拆分该字符串的deviceID。 这是我的问题,我知道如何在java中轻松地做到这一点(即使不使用标准的分割function),但在C中它是一个完全不同的故事。 你们中的任何人都能告诉我如何让这个工作吗? 谢谢 /* Serial Event example When new serial data arrives, this sketch adds it to a String. When a newline is received, the loop prints the string and clears it. A good test for this is to try it with a GPS receiver that sends out NMEA […]

如何为数组分配繁琐的重复值?

我想创建一个10×10的数组,其中包含’.’ 对于每个元素。 所以我写道: int A[10][10]={ ‘.’,’.’,’.’,’.’, (等一下我要写100个句号和100个逗号) ‘.’,’.’,’.’} 另一种方法是写’.’, 10次​​,然后复制粘贴10次,但这仍然需要时间,我不认为这是最聪明的方法。 有更聪明的方法吗? 我不想写这么久的句号。

搜索在非文件终止的文件中以NULL结尾的字符串

我正在编写一个程序打开两个文件进行读取:第一个文件包含20个名称,我存储在Names[0] = John\0forms的数组中。 第二个文件是一个大文本文件,其中包含20个名称中每个名称的许多出现。 我需要我的程序扫描第二个文件的完整性,每次找到其中一个名称,变量Count递增,等完成程序,文本中出现的所有名称的总数存储在Count 。 这是我的循环,它搜索并计算出现的名称数量: char LineOfText[85]; char *TempName; while(fgets(LineOfText, sizeof(LineOfText), fpn)){ for(a = 0; a<NumOfNames; a++){ TempName = strstr(LineOfText, Names[a]); if(TempName != NULL){ Count++; } } } 无论我做什么,这个循环都不能像我期望的那样工作,但我发现了什么是错的(我想!)。 我的问题是数组中的每个名称都以NULL结尾,但是当文本文件中出现名称时,它不会以NULL结尾,除非它作为一行的最后一个单词出现。 因此,此while循环仅计算任何名称出现在行尾的次数,而不是文本文件中任何位置的任何名称的出现次数。 如何调整此循环以解决此问题? 提前感谢您的任何建议。