c语言 怎么读内存数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 怎么读内存数据相关的知识,希望对你有一定的参考价值。

已知内存地址0x08116314 怎么读出数据并存入变量 我老是读出来的数据和实际的不一

分配内存空间然后读取

#include<stdio.h>

#include<stdlib.h>

intfilelength(FILE*fp);

char*readfile(char*path);

intmain(void)

FILE*fp;

char*string;

string=readfile("c:/c.c");

printf("读入完毕\\n按任意键释放内存资源\\n");

//printf("%s\\n",string);

system("pause");

return0;

char*readfile(char*path)

FILE*fp;

intlength;

char*ch;

if((fp=fopen(path,"r"))==NULL)

printf("openfile%serror.\\n",path);

exit(0);

length=filelength(fp);

ch=(char*)malloc(length);

fread(ch,length,1,fp);

*(ch+length-1)='\\0';

returnch;

intfilelength(FILE*fp)

intnum;

fseek(fp,0,SEEK_END);

num=ftell(fp);

fseek(fp,0,SEEK_SET);

returnnum;

扩展资料

cLinux进程间通信共享内存:

#include"comm.h"

staticintcommShm(intsize,intflags)//创建共享内存

key_tkey=ftok(PATHNAME,PROJ_ID);

if(key<0)

perror("ftok");

return-1;

intshmid=shmget(key,size,flags);

if(shmid<0)

perror("shmget");

return-2;

returnshmid;

intcreateShm(intsize)

returncommShm(size,IPC_CREAT|IPC_EXCL);

intgetShm(intsize)//获取共享内存

returncommShm(size,IPC_CREAT);

intdestoryShm(intshmid)//销毁共享内存

if(shmctl(shmid,IPC_RMID,NULL)<0)

perror("shmctl");

return-3;

参考技术A

  C语言访问内存可借助指针实现。方法:

  1、声明一种特定类型的指针,根据以何种方式访问内存来确定。比如从内存中读取整形数据,则声明为int *类型。

  2、用内存地址为指针赋值,注意进行类型转换。

  3、对指针进行取值,得到数据。

  例子:

int *a;

a = (int *)0x34587;
printf("%d", *a);

  注意,要确定访问地址的合法性。

参考技术B 0x08116314只是一个地址指针,读取时,数据的类型必须确定。
假定存储的是int类型,那么读取时,必须强制类型转换,即
int *p = 0x08116314;
那么 *p 就是数据了。
假定是字符串,那么则有
char *p = 0x08116314;
char str[20]; // 假定串长在20之内,则有
strcpy(str,p);
参考技术C 宏定义时 #define a (*(volatile unsigned *)0x08116314) 则你在用的时候假如要把内存地址0x08116314中的数值读取给变量b,则直接用:b=a;就可以读出了。 参考技术D   我不知道LZ目前有没有学到指针,用指针很好解释的。
&就是取地址,而*(指针运算符)相对的就是取其指向的内容。
  声明一个指针变量,将地址赋给这个变量,再类型转换成读取的数据类型就行了。
type *p=0x08116314 ;
LZ看到这个语句应该能明白了

C语言对结构体文件的读取

现在只知道一个文件存取数据的时候是用的这个结构体(他的两成员变量都是指针类型的. ) typedef struct TEST char* ch; char* cha; TESTFEI; 现在要读取这个文件中的数据,应该怎么办呢?

参考技术A C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。
函数说明:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。
如,有如下结构体定义:
typedef struct TEST

int num;
double score;
STRTEST;
STRTEST data ;
FILE *fp = fopen("file.dat", "rb" ) ; //按二进制格式打开文件
int n=fread( &data, sizeof(STRTEST), 1, fp ); //读取一个数据块到变量data中。
注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。
因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。

以上是关于c语言 怎么读内存数据的主要内容,如果未能解决你的问题,请参考以下文章

c语言中malloc是啥?怎么用?

C语言里 init这个函数具体怎么用

C语言怎改变文件外存地址里的数字?

C语言怎么把文件的内容读到链表里面?

C语言怎么读取二进制文件中的数据放到一个300×300的二维数组里面

c语言 怎么读文件中的汉字