小编Jen*_*edt的帖子

连续两次 fwrites 操作

我在写模式下打开了一个文件,如下所示:

int a = 10;
char b = 'm';
int y = 0;
char z;

FILE *fp = NULL;
fp = fopen("/config/gps_backup.dat","w");
Run Code Online (Sandbox Code Playgroud)

我正在对文件执行两个变量的 frwite(第一个是整数,第二个是字符),如下所示:

fwrite(&a,1,sizeof(int),fp);
fwrite(&b,1,sizeof(char),fp);
Run Code Online (Sandbox Code Playgroud)
  1. 两个连续的 fwrite 操作会不会互相覆盖
  2. 如果没有,两个连续的 fread 操作是否可以正确填充到我的变量中

例如:

fread(&y,1,sizeof(int),fp);
fread(&z,1,sizeof(char),fp);
Run Code Online (Sandbox Code Playgroud)

如果连续 fread 操作完成,y 和 z 变量是否可以保存 10 和 'm' 的值。

c fwrite fread

2
推荐指数
1
解决办法
2105
查看次数

Sizeof数组和指针

这是我的示例代码

#include<stdio.h>
void main()
{
 int arr[]={1,2,3,4,5,6};
 char *ptr,a;
 a='c';
 ptr=&a;
 int *ptr1,a1;
 a1=4;
 ptr1=&a1;
 printf("%d  %d   %d",sizeof(arr), sizeof(ptr1), sizeof(ptr));
}
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,大小将告诉我存储变量所需的大小,现在这个的输出是

24 4 4

为什么它的大小arr=24只是一个指针而且它的大小应该是4?

谢谢.

c sizeof

2
推荐指数
1
解决办法
360
查看次数

如何在c/c ++中默认初始化函数指针?

我传递一个函数指针到另一个函数,我希望它是默认初始化,这是我正在尝试,但这给出了语法错误

void bar(int i) {}
void foo(void (*default_bar=bar)(int)) {
//
}
Run Code Online (Sandbox Code Playgroud)

错误 :

Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/f_13.d" -MT"src/BinarySearchTree_13.d" -o "src/BinarySearchTree_13.o" "../src/f_13.cpp"
In file included from ../src/f_13.cpp:10:
../src/tree.h:51: error: expected `)' before '=' token
../src/tree.h:51: error: 'foo' declared as function returning a function
../src/tree.h:51: error: expected ';' before ')' token
../src/tree.h:60: error: expected `;' before 'void'
make: *** [src/f_13.o] Error 1
Run Code Online (Sandbox Code Playgroud)

只是说这很好用:

void foo(void (*default_bar)(int)) {
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction gcc function-pointers

2
推荐指数
2
解决办法
2513
查看次数

左值和右值赋值错误

int x = 3;
int y = 5;
x++ = y;
cout << x << endl;
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码给我一个错误,我得到的具体错误是

左值作为赋值的左操作数.

我正在尝试回顾我的C和C++.从我的理解,上面的代码理论上应该复制y到into 的值x,然后最后增加x复制完成后的值.所以它会打印出"6".

c++ assignment-operator post-increment

2
推荐指数
1
解决办法
1733
查看次数

在C中使用sem_wait时执行某些操作

我试图避免使用sem_wait,并且有类似的东西:"在等待信号量时,做一些事情".所以我发现了sem_getvalue,它应该在成功的情况下返回0.

所以我用以下方式启动信号量:

sem_init(&sem1, 0, 0);
Run Code Online (Sandbox Code Playgroud)

而不是

sem_wait(&sem1);
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

while(sem_getvalue(&sem1, 2) < 0){
    printf("do this\n");
}
Run Code Online (Sandbox Code Playgroud)

我对sem_wait没有任何问题,一切似乎都正常运行.但是第二个,我在执行期间遇到了Segmentation fault错误.

非常感谢任何帮助,谢谢!

c posix semaphore while-loop

2
推荐指数
1
解决办法
710
查看次数

c ++ O3优化中断工作while循环

我有这个简单的代码,它在 pcm wav 文件中使用 fseek 逐步搜索文件中的“数据”:

  FILE * waveFile;
  waveFile = fopen ( this->fileLocation.c_str ( ), "rb" );

  // ... some other code here between, then ... //

  int seekTo = 0;
  bool found = false;
  char data[4];

  rewind ( waveFile );
  while ( !found && ( fseek ( waveFile, seekTo, SEEK_SET ) == 0 )) {
    fread ( data, sizeof ( data ), 1, waveFile );
    if (( std::strcmp ( data, "data" ) == 0 ) || ( std::strcmp …
Run Code Online (Sandbox Code Playgroud)

c++ fseek compiler-optimization c++11

2
推荐指数
1
解决办法
478
查看次数

如何在没有 win32 或 Linux 端口的笔记本电脑上安装 freeRTOS 以获得实时行为?

我正在开始使用 freeRTOS。我浏览了 freeRTOS.org 中提供的文档,并对一些演示项目进行了一些练习。我的问题是如何在不使用 win32 端口的情况下安装 freeRTOS(因为它只是一个不提供实时行为的模拟器)?是否可以将 freeRTOS 作为独立操作系统安装,或者是否需要使用 Linux 内核或 Windows?

freertos

2
推荐指数
1
解决办法
874
查看次数

strtol使用errno

我有以下代码:

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

void main(void)
{
     int data;
     char * tmp;
     data = strtol("23ef23",&tmp,10);
     printf("%d",errno);
     getchar();
}
Run Code Online (Sandbox Code Playgroud)

输出为0 ...

为什么?

我使用visual studio 2010 C++代码必须与C89兼容.

c c89

1
推荐指数
1
解决办法
1万
查看次数

pair&lt;int, int&gt; 向量数组的下界函数

假设向量数组按以下规则排序:- A[i] > A[j] 对于 A[i] (a,b) 中的所有对和 A[j] a>c 中的所有对 (c,d) 和b>d。假设输入数组已排序。现在给定一个上述类型的数组,

A[0] = (0,1)
A[1] = (4,3), (2,5)
A[2] = (12,4), (10, 6)
...
Run Code Online (Sandbox Code Playgroud)

现在您将一对作为输入,如何使用内置的lower_bound 函数找到lower_bound。我写了一个代码,但它给了我一些错误。我错过了什么?

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> mypair;
vector <mypair> A[100008];
mypair B;
bool operator < (const mypair &a1, const mypair &a2){
    return (a1.first < a2.first && a1.second < a2.second);
}
bool operator < (const vector<mypair> &a1, const mypair &a2){
        for(int i = 0; i< a1.size();i++){
            if (a1[i] < …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
3684
查看次数

正确使用POSIX的pthread_exit和pthread_join

我试图获得从pthread返回值并捕获该值的概念,但我无法理解发生了什么,或者如何使其工作.我有这个简单的程序创建一个单独的线程,这个线程以int值100退出,然后我尝试用pthread_join捕获该值:

#include <stdio.h>
#include <pthread.h>

void *doStuff(void *param) {
    int a = 100;
    pthread_exit(a);
}

void main() {
    pthread_t thread;
    int a;
    pthread_create(&thread, NULL, doStuff, NULL);
    pthread_join(thread, &a);
    printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

它有效,但抛出一些警告:

./teste.c: In function ‘doStuff’:
./teste.c:7:2: warning: passing argument 1 of ‘pthread_exit’ makes pointer from integer without a cast [enabled by default]
In file included from ./teste.c:2:0:
/usr/include/pthread.h:241:13: note: expected ‘void *’ but argument is of type ‘int’
./teste.c: In function ‘main’:
./teste.c:17:2: warning: passing argument 2 of ‘pthread_join’ …
Run Code Online (Sandbox Code Playgroud)

c pthreads

1
推荐指数
1
解决办法
5448
查看次数