我有一个很长的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呢?它是否有助于有效地使用资源,或者是否会出现一些严重的问题(如果是这种情况,可能会发生什么)?
我正在尝试确定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) 是否可以复制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?
我正在开发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)
并且它是一些非常小的数据,一些字节长
我需要读取 0x2428(MCU 的闪存)地址中的值。如何使用 memcpy 读取值?
uint8_t *newData ,x;
memcpy( newData, 0x2428, sizeof x);
Run Code Online (Sandbox Code Playgroud)
但是,我得到
错误[Pe167]:“int”类型的参数与“void const *”类型的参数不兼容
我应该如何修复错误?
下面的代码在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)