小编sve*_*ven的帖子

一次使用的功能 - 我应该使用malloc吗?

我有一个很长的C代码,有一个函数只能被调用一次.其中包括像一些变量char array,int.代码是这样的:

void onetimefcn(){
    char example_array1[20]="hello...";
    //...
    char example_array10[14]="hej...";
    int x=3,y=432,z=321,d=4439;
    //some arithmatic operation
    //some char array operation: strcpy, strcmp
    // some for loops and if else conditions
}
Run Code Online (Sandbox Code Playgroud)

我将在嵌入式Linux设备上运行该代码.我想知道我是否应该使用malloc该函数的所有变量然后free呢?它是否有助于有效地使用资源,或者是否会出现一些严重的问题(如果是这种情况,可能会发生什么)?

c linux malloc memory-management

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

如何确定uint8_t的数组长度?

我正在尝试确定msg下面代码的数组长度,我使用了strlen和sizeof但它们没有返回6.我可以用什么函数来确定uint8_t数组的长度或者如何修改下面的代码(osal_DataLenght() FCN)?

int osal_DataLength( char *pString ){
  return (int)( strlen( pString ) );
}

void setNewLevel( uint8_t newLevel ){ //GW specific
  uint8_t msg[8] = {'\0'};
  msg[0] = '0';
  msg[1] = '7';
  msg[6]= newLevel;
  //msg[7] = '0';
  printf("the array length:%d\n", osal_DataLength(msg) );
}

int main(void){
    setNewLevel(0xD5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays strlen uint8t

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

通过system()调用char数组复制已执行命令的输出

是否可以复制system()Linux 上函数使用的命令的输出?例如,如果我跑

#include <stdlib.h>

int main(int argc,char *argv[]){
    char date[8]; //e.g., 20130421 yyyymmdd
    char time[4]; // e.g., 0204 hhmm
    system("ntpdate");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它输出:

21 Apr 02:12:56 ntpdate[32680]: no servers can be used, exiting

是否可以将输出复制到字符串?如何将日期和时间信息复制到char数组,例如char *date; char *time在C?

c linux datetime

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

在Linux上使用fwrite作为原子进程

我正在开发Linux环境下的C代码.我fwrite用来写一些数据到一些文件.该计划将在经常断电(至少每天一次)的环境中运行.因此,我想fwrite确保在写入数据时发生断电时不应更新该文件.它应该只在fwrite完成其工作时保存文件.如何fwrite在文件完成写入过程后才能使用该效果?

编辑:我使用fopen wb来丢弃文件中的先前信息并编写一个新文件,例如

FILE *rtng_p;
rtng_p = fopen("/etc/routing_table", "wb");
fwrite(&user_list, sizeof(struct routing), 40, rtng_p);
Run Code Online (Sandbox Code Playgroud)

并且它是一些非常小的数据,一些字节长

c linux atomic fwrite

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

使用 memcpy(...) 读取物理地址处的值

我需要读取 0x2428(MCU 的闪存)地址中的值。如何使用 memcpy 读取值?

 uint8_t *newData ,x;
 memcpy( newData, 0x2428, sizeof x);
Run Code Online (Sandbox Code Playgroud)

但是,我得到

错误[P​​e167]:“int”类型的参数与“void const *”类型的参数不兼容

我应该如何修复错误?

c memcpy

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

TCP服务器无法正确接收数据

下面的代码在Qt C++中有C和TCP服务器中的TCP客户端.我的问题是我使用TCP来提高可靠性,但它有数据丢失(而不是数据包).在我的主代码中,如果我运行tcp客户端来发送数据,TCP服务器只接收一个数据包.如果我sleep(1);在每个数据包传输之间添加到客户端,则TCP服务器接收数据.客户端和服务器都在同一台计算机上运行.

为了简化问题并且不能在这里放置太大的代码,我有以下代码执行得更快,但它丢失了数据包的最后10-15个字节.

TCP C客户端

main.c中

#include "socket_handler.h" //I didn't put the all includes here
#define     PORT             22208
//tcp server
int main(void)
{
    int sockfd;
    uint32_t senderAddress = 2130706433; //127.0.0.1
    if( connect_to_server_w_uint( &sockfd, senderAddress, PORT ) < 0 ){
        printf("error at line 454\n");
        exit(1);
    }

    char data[] = "124b00068c158f$321$52712304$13.212779$0$O$0$0$b4$1$0$3$0$0$0$0$11$0$7$0$1$fe$f1$aaa9fffffffffd80$2132b00$eb460b5e$1$1$2016-02-22 03:01:00$0000-00-00 00:00:00$321$24754$321$13132$1$98$0$5.1$0$3c$64$1$96$4d$3e8$38$2$46$dc$4$3$f6$e6$17$0$e6$d3$1$0$e6$d3$2$0£";
    char buffer[512];

    int i=0;
    for(i=0; i<1000; i++){
        bzero(buffer, 512);
        sprintf(buffer, "%d***%s  -----",i,data);
        send_data_to_server(&sockfd, buffer, strlen(data)  +1 );
        printf("[%d]: data is sent\n", i);
    }
    close_connection(&sockfd);

    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c c++ qt tcp serversocket

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

标签 统计

c ×6

linux ×3

arrays ×1

atomic ×1

c++ ×1

datetime ×1

fwrite ×1

malloc ×1

memcpy ×1

memory-management ×1

qt ×1

serversocket ×1

strlen ×1

tcp ×1

uint8t ×1